2012-12-11 56 views
0
List<Foo> fooList = new List<Foo>(); 

fooList.Add(new Foo(){ 
    Id = 1, 
    Bar = 1, 
    Blah = 1 
}); 

fooList.Add(new Foo(){ 
    Id = 1, 
    Bar = 2, 
    Blah = 1 
}); 

fooList.Add(new Foo(){ 
    Id = 2, 
    Bar = 1, 
    Blah = 2 
}); 

如果我組我fooListId財產,除Bar所有屬性都彼此相等爲每個組。我注意到有一個GroupMy lambda方法,但是有什麼辦法按Id將列表分組,並且使Bar屬性成爲每個id的所有Bar的列表?合併分組泛型列表

因爲現在我每行都有很多冗餘數據。如果您想讓我詳細說明問題,請告訴我。

+0

一個查詢不能改變一個類的結構,因爲'Bar'是一個'int',查詢應該如何改變它爲'IEnumerable '? (_「是否有任何方法可以通過Id對列表進行分組,並且**使Bar屬性成爲每個ID的所有列**的列表」_) –

+0

@TimSchmelter將它有助於將類型更改爲「dynamic」嗎? – Johan

+0

你可以這樣做:'fooList.ToLookup(x => x.Id,x => x.Bar)' – Magnus

回答

2

使用GroupBy擴展,讓您確定元素選擇:

var query = fooList.GroupBy(f => f.Id, f => f.Bar); 

// Iterate over each grouping in the collection. 
foreach (var group in query) 
{ 
    // Print the key value. 
    Console.WriteLine(group.Key); 
    // Iterate over each value in the 
    // grouping and print the value. 
    foreach (int bar in group) 
     Console.WriteLine(" {0}", bar); 
} 

或者,如果你想Bar是一個明確的財產:雖然我覺得有點難以閱讀

var query = fooList.GroupBy(
    f => f.Id, 
    (id, foos) => new {Id = id, Bars = foos.Select(f=>f.Bar)}); 

+0

嗯,我得到的Bar'值按我的意思排序,但是每行的其餘屬性如何呢? – Johan

+0

@Johan這是一個普通的'GroupBy'(沒有元素選擇器)會給你的。 – Magnus

+0

這可能就像我能得到我所需要的那樣接近我的有點差的解釋:)謝謝 – Johan