2012-04-03 86 views
3

我有一個C#中的對象列表。所有對象都包含屬性code1和code2(以及其他屬性)。將具有匹配屬性的對象組合到列表中

實施例:

List -> object = id, name, code1, code2, hours, amount. 

有31倍可能的代碼1的值。 有10個可能的code2值。

我需要組合在一起具有將被保存在一個父列表中的相同代碼1和代碼2的值(獨特的組合)爲自己列出的所有對象(讓每個人名單以後可以遍歷。)

+0

您是否嘗試過使用LINQ過濾您的列表? 它通過Sql查詢語法使List過濾變得容易。 – phadaphunk 2012-04-03 18:04:22

回答

9

聽起來像是你想要的東西,如:

var groups = list.GroupBy(x => new { x.code1, x.code2 }); 

// Example of iterating... 
foreach (var group in groups) 
{ 
    Console.WriteLine("{0}/{1}:", group.Key.code1, group.Key.code2); 
    foreach (var item in group) 
    { 
     Console.WriteLine(" {0} ({1})", item.id, item.name); 
    } 
} 
+0

這正是我所需要的。感謝您的解決方案和示例迭代。 – Baxter 2012-04-03 18:11:18

+0

它會像我將它轉換爲新對象一樣工作=> list.GroupedBy(x => new TempObject {x.code1,x.code2}); – cpoDesign 2014-03-19 15:27:46

4

可枚舉擴展是你的朋友(是*你的朋友:)

var groups = lists.GroupBy(item => new { item.code1, item.code2 }); 

而且....信用證?在我做之前,Egendary Skeet擊中了SHAME!

時間到一個向上Skeet(哈,右)。您也可以將您的常用項目分組在字典中。

var mapping = list 
    .GroupBy(item => new { item.code1, item.code2 }) 
    .ToDictionary(g => g.Key, g => g.ToList()); 

現在映射是Dictionary<anon{code1, code2}, List<YourObject>>。當然,您可以將ToList的值忽略掉,並且字典的值類型將是IGrouping,它是一個IEnumerable。

你也可以使用ToLookup

var lookup = list.ToLookup(item => new { item.code1, item.code2 }); 

結果是ILookup這給了鑰匙類型的密鑰,並使用列表類型的IEnumerable。這不是一本字典,但可以類似地使用。

+2

使用'list.ToLookup(x => new {item.code1,item.code2})':)會更簡單:) :) – 2012-04-03 18:14:33

+1

感謝您幫助我一個人...... :) – payo 2012-04-03 18:15:23

相關問題