2011-08-25 5 views
9

¿Qué es equivalente al siguiente fragmento de código en la expresión lambda?Compuesto Seleccione usando la expresión lambda

int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 }; 
int[] numbersB = { 1, 3, 5, 7, 8 }; 

var pairs = 
    from a in numbersA 
    from b in numbersB 
    where a < b 
    select new { a, b }; 
+1

Apenas encendido hasta ILSpy para averiguar, pero no cambió en los métodos. (Parece que tendré que esperar a @Jon Skeet!) –

Respuesta

10

Aquí es una expresión LINQ utilizando método sintaxis (en contraposición a sintaxis de consulta):

int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 }; 
int[] numbersB = { 1, 3, 5, 7, 8 }; 

pairs = numbersA 
    .SelectMany(_ => numbersB, (a, b) => new { a, b }) 
    .Where(x => x.a < x.b); 

La búsqueda original se traduce en esto:

int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 }; 
int[] numbersB = { 1, 3, 5, 7, 8 }; 

pairs = numbersA 
    .SelectMany(_ => numbersB, (a, b) => new { a, b }) 
    .Where(x => x.a < x.b) 
    .Select(x => new { x.a, x.b }); 

Sin embargo el último Select no es necesario y puede eliminarse.

+0

+1, ¿Eso es en realidad a lo que se traduce, o es así como lo harías? –

+0

@George Duckett: He ampliado mi respuesta para responder a su comentario. –

+0

Gracias, por interés, ¿cómo se enteró de la traducción original? –

3

Por favor, echar un vistazo a este enlace para LINQ a las traducciones Lambda

LinQ to Lambda

+0

+1, excelente enlace. –