2008-11-14 15 views
18

Sagen, ich habe zwei Listen:Können Sie mehrere Listen mit LINQ kombinieren?

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

Ist es möglich, eine LINQ-Anweisung zu schreiben, die die folgende Liste generiert:

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"} 
}; 

?

Bearbeiten: Ich habe vergessen zu erwähnen, ich wollte es nicht in Abfrage-Syntax. Wie auch immer, basierend auf Antwort des preetsangha Ich habe folgendes bekam:

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

Was stimmt nicht mit der Abfragesyntax? –

+0

Ja, komisch, dass du Jons Antwort als Antwort wählen würdest, als Preetsangha zuerst einstieg und eine andere Version des gleichen Codes hatte (mit Respekt für Jon). –

+2

Wenn ich beides auswählen könnte, würde ich. Wenn ich die Abfragesyntax nicht mag, mag ich es einfach nicht. Es fühlt sich falsch an, da es nicht in C# passt und nicht alle neuen Sachen in LINQ in der Abfragesyntax verfügbar sind, wie ToList() usw. –

Antwort

21

preetsangha Antwort ist ganz richtig, aber wenn man dann keine Abfrageausdruck wollen es ist:

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

(Dazu kompiliert der Compiler den Abfrageausdruck - sie sind identisch.

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