2013-02-07 13 views
6

Vielleicht ist es spät in der Nacht, aber ich bin hier ratlos. Ich versuche, mehrere Listen mit denselben Eigenschaften zu einem zu kombinieren. Ich dachte, dass LINQ's .UNION den Trick machen würde, aber ich habe mich geirrt. Hier ist ein Beispiel für ein paar meiner Listen:C# - Kombinieren Sie mehrere LINQ-Sammlungen mit denselben Eigenschaften

LIST1 (report names): 
Date  Name Title   Product 
02/01/13 Steve Hello World Report 
02/05/13 Greg Howdy   Report 

LIST2 (song names): 
Date  Name Title   Product 
01/01/13 John Time   Song 
01/05/13 Bob  Sorry   Song 

LIST3 (games names): 
Date  Name  Title   Product 
12/01/12 Google Bike Race  Game 
12/05/12 Apple  Temple Run Game 

Meine Klasse ist sehr einfach. Hier ist, wie es aussieht:

public class MyClass { 
    public DateTime Date { get; set; } 
    public string Name { get; set; } 
    public string Title { get; set; } 
    public string Product { get; set; } 
} 

Falls Sie sich fragen, habe ich diese LINQ-Abfrage eine der oben genannten Listen zu bekommen:

var finalList = Games 
    .Select (s => new MyClass { 
    Date = (System.DateTime) s.Games.Creation_date, 
    Name = s.Games.Last_name, 
    Title = string.Format("{0} (Report)", s.Game.Headline), 
    Product="Report" 
    }) 
    ; 

Bisher ist es ziemlich einfach, aber ich will Also alle meine Listen in 1 zu kombinieren, sollte meine endgültige Liste wie folgt aussehen:

Date  Name Title   Product 
02/01/13 Steve Hello World Report 
02/05/13 Greg Howdy   Report 
01/01/13 John Time   Song 
01/05/13 Bob  Sorry   Song 
12/01/12 Google Bike Race  Game 
12/05/12 Apple Temple Run Game 

ich dachte, dass ein UNION-Befehl es tun würde:

var newList = List1.Union(List2).Union(List3); 

Aber ich bekomme nicht die gewünschte Ausgabe.

Date  Name Title   Product 
02/01/13 Steve Hello World Report 
02/05/13 Greg Howdy   Report 
01/01/13 Bob  Time   Game 
01/05/13 John Sorry   Song 
12/01/12 Google Bike Race  Song 
12/05/12 Apple Temple Run Game 

Irgendeine Idee, was ich hier falsch mache?

+0

was die Sie haben sein aussehen sollte zur Folge haben wenn du Union benutzt? –

Antwort

14

Versuchen:

list1.Concat(list2).Concat(list3); 

Sie wollen nicht Union verwenden werden (oder nicht funktioniert) sowieso, wie es Union gesetzt hat.

1

Sie könnten versuchen, den AddRange Befehl mit so etwas wie dieses

var FullList = list1.AddRange(list2).AddRange(list3); 

oder die ausfallsichere Art und Weise whould

var FullList = list1.Concat(list2).Concat(list3).ToList(); //Personally i would use this 

oder auch

var FullList = new[] { list1, list2, list3 }.SelectMany(a => GetAllProducts(a)).ToList(); 
Verwandte Themen