所以我有以下内容:
class Item
{
string Name;
bool IsSelected;
}
我有3个名单:
List<Item> list1;
List<Item> list2;
List<Item> list3;
我的目标是将上面的内容翻译成一个集合,其中类似的“Item”对象被组合在一起(类似=具有相同“Name”的对象)。
所以我想:
List<ItemContainer> resultantList;
其中:
class ItemContainer
{
string Name;
IList<Item> items; //items with the same 'Name' (potentially)
}
注意:
实现这一目标最简洁,最清晰的方法是什么?
注意:表现不是问题。
感谢您的帮助。
答案 0 :(得分:3)
您可以尝试GroupBy,
var groupyName = list1.Concat(list2).Concat(list3).GroupBy(I => I.Name);
答案 1 :(得分:1)
这是做到这一点的方法:
itemContainer.items = list1.Concat(list2).Concat(list3)
.Distinct()
.OrderBy(item => item.Name)
.ThenByDescending(item => item.IsSelected)
.ToList();
以下是您要求的完整示例,
请注意,您不需要GroupBy
,因为分组的返回值与您希望收到的新列表不同。
您需要覆盖Item
和GetHashCode()
的{{1}}方法,因为Equals(object obj)
会自动使用它们来比较项目。
Distinct()