2012-02-29 18 views
7

Mam listę obiektów, które chcę przekształcić w inną listę obiektów.Grupowanie obiektów za pomocą wyrażeń linq lub lambda

Pierwszy obiekt wygląda tak:

private class ObjectOne 
    { 
     public string Name { get; set; } 
     public string Item{ get; set; } 
    } 

I jeszcze jak ten

public class ObjectTwo 
{ 
    public string Name { get; set; } 
    public IEnumerable<string> Items{ get; set; } 
} 

chciałbym napisać kwerendy LINQ lub wyrażenie lambda, które można przekształcić listę danych ObjectOne do lista danych ObjectTwo. Każda pozycja na liście ObjectTwo będzie zawierała odrębną nazwę od ObjectOne wraz z wyliczeniem wszystkich elementów powiązanych z tą nazwą.

Na przykład poniższa lista danych ObjectOne

"Name One", "Item One" 
"Name One", "Item Two" 
"Name Two", "Item Three" 

da następujący ObjectTwo listę:

"Name One", {"Item One", "Item Two"} 
"Name Two", {"Item Three"} 

Odpowiedz

8

Użyj operatora GroupBy Linq. Następnie dla każdej grupy wybierz klucz (ten, którego użyłeś do grupowania) i przekonwertuj elementy każdej grupy na listę.

+1

+1 dla * nie * przy użyciu składni ze zrozumieniem zapytań. Byłoby +2, gdybyś napisał "n =>" zamiast "jeden =>" :) –

+0

Pozdrawiam, zaktualizowany kod. wygląda na to, że wygląda lepiej :) –

+0

@BryanHong, dzięki działa doskonale! – zaq

2

Można to osiągnąć za pomocą operatora group by LINQ:

var obj2List = 
    from o in list 
    group o by o.Name into g 
    select new ObjectTwo() {Name = g.Key, Items = g.Select(x => x.Item)}; 
Powiązane problemy