2010-03-20 14 views

Respuesta

16

Esencialmente es un Select (en la mayoría de los casos) que introduce un identificador transparente - a través de un tipo anónimo que encapsula todas las variables de rango actualmente especificados. Por ejemplo, la siguiente consulta:

string[] names = { "Jon", "Mark" }; 

var query = from name in names 
      let length = name.Length 
      where length > 3 
      select name + ": " + length; 

se traduce en algo como esto:

var query = names.Select(name => new { name, length = name.Length }) 
       .Where(z => z.length > 3) 
       .Select(z => z.name + ": " z.length); 
+2

No es mi intención criticar su respuesta (en contra de lo aprecio), pero ya que se podía utilizar la cláusula let para escribir un método mucho más complicado y en su ejemplo aquí, la notación de punto ya es más larga y menos legible que la contraparte exp de la consulta, considero que este es otro caso donde la exp de consulta es más preferible que la nación punto. El otro caso que conozco implica escribir uniones. ¿Estaría de acuerdo con esa observación? Gracias por tu respuesta. –

+4

@Khnle: Probablemente es una cuestión de preferencia personal. De hecho, prefiero el aspecto de la notación de punto en este caso. Una vez que te acostumbras a la sintaxis lambda, es bastante fácil de leer, más descriptivo de lo que realmente sucede debajo del capó, y no requiere el azúcar sintáctico adicional de la declaración 'let'. –

+2

@Khnle: Sí, generalmente encuentro que las expresiones de consulta que introducen identificadores transparentes (incluyendo let y join) son más legibles que sus equivalentes de notación de punto. Aunque Robert tiene razón, definitivamente es una preferencia personal. –

Cuestiones relacionadas