我有一個C#中的對象列表。所有對象都包含屬性code1和code2(以及其他屬性)。將具有匹配屬性的對象組合到列表中
實施例:
List -> object = id, name, code1, code2, hours, amount.
有31倍可能的代碼1的值。 有10個可能的code2值。
我需要組合在一起具有將被保存在一個父列表中的相同代碼1和代碼2的值(獨特的組合)爲自己列出的所有對象(讓每個人名單以後可以遍歷。)
我有一個C#中的對象列表。所有對象都包含屬性code1和code2(以及其他屬性)。將具有匹配屬性的對象組合到列表中
實施例:
List -> object = id, name, code1, code2, hours, amount.
有31倍可能的代碼1的值。 有10個可能的code2值。
我需要組合在一起具有將被保存在一個父列表中的相同代碼1和代碼2的值(獨特的組合)爲自己列出的所有對象(讓每個人名單以後可以遍歷。)
聽起來像是你想要的東西,如:
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);
}
}
可枚舉擴展是你的朋友(是*你的朋友:)
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。這不是一本字典,但可以類似地使用。
使用'list.ToLookup(x => new {item.code1,item.code2})':)會更簡單:) :) – 2012-04-03 18:14:33
感謝您幫助我一個人...... :) – payo 2012-04-03 18:15:23
您是否嘗試過使用LINQ過濾您的列表? 它通過Sql查詢語法使List過濾變得容易。 – phadaphunk 2012-04-03 18:04:22