2008-11-14 22 views
18

Decir que tengo dos listas:¿Se pueden combinar varias listas con LINQ?

var list1 = new int[] {1, 2, 3}; 
var list2 = new string[] {"a", "b", "c"}; 

¿Es posible escribir una declaración de LINQ que generará la siguiente lista:

var result = new []{ 
    new {i = 1, s = "a"}, 
    new {i = 1, s = "b"}, 
    new {i = 1, s = "c"}, 
    new {i = 2, s = "a"}, 
    new {i = 2, s = "b"}, 
    new {i = 2, s = "c"}, 
    new {i = 3, s = "a"}, 
    new {i = 3, s = "b"}, 
    new {i = 3, s = "c"} 
}; 

?

Editar: Olvidé mencionar que no lo quería en la sintaxis de la consulta. De todos modos, en base a la respuesta de preetsangha Tengo el siguiente: Respuesta

var result = list1.SelectMany(i => list2.Select(s => new {i = i, s = s})); 
+0

¿Qué pasa con la sintaxis de la consulta? –

+0

Sí, es extraño que selecciones la respuesta de Jon como la respuesta cuando preetsangha entró primero y tenía otra versión del mismo código (con el debido respeto a Jon). –

+2

Si pudiera elegir los dos, lo haría. En cuanto a que no me gusta la sintaxis de las consultas, simplemente no me gusta. Se siente mal, ya que no encaja con C# y no todas las cosas nuevas en LINQ están disponibles en sintaxis de consulta, como ToList() etc. –

Respuesta

21

de preetsangha es del todo correcto, pero si usted no quiere una expresión de consulta entonces es:

var result = list1.SelectMany(l1 => list2, (l1, l2) => new { i = l1, s = l2}); 

(A eso es a lo que el compilador compila la expresión de consulta: son idénticos).

42
var result = from l1 in list1 
      from l2 in list2  
      select new { i = l1, s = l2}; 
Cuestiones relacionadas