2013-02-07 12 views
6

Może jest późno w nocy, ale jestem tu zakłopotany. Próbuję połączyć wiele list z tymi samymi właściwościami w jeden. Myślałem, że LUNQ .UNION zrobi lewę, ale się pomyliłem. Oto przykład kilku z moich list:C# - Połącz wiele kolekcji LINQ z tymi samymi właściwościami

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 

Moja klasa jest bardzo prosta. Oto jak to wygląda:

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

W przypadku, gdy zastanawiasz się, użyłem tej kwerendy LINQ, aby uzyskać jedną z powyższych list:

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

Jak dotąd, jest to dość łatwe, ale chcę połączyć wszystkie moje listy do 1. Tak więc, moja ostateczna lista powinna wyglądać następująco:

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 

Myślałem, że polecenie UNION byłoby to zrobić:

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

Ale nie otrzymuję pożądanego wyniku.

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 

Każdy pomysł na temat tego, co robię źle tutaj?

+0

jakie wynikają cię uzyskać przy użyciu Unii? –

Odpowiedz

14

Spróbuj:

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

Nie chcą używać Union (pracuje lub nie) i tak jak to ma ustawić unii.

1

Można spróbować użyć polecenia AddRange powinien wyglądać mniej więcej tak

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

lub fail bezpieczny sposób whould być

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

lub masz również

var FullList = new[] { list1, list2, list3 }.SelectMany(a => GetAllProducts(a)).ToList(); 
Powiązane problemy