我有一个C#问题。我有一个Type Item对象列表。我需要将所有这些“subItemCode”的子项列表分组,因为这可以在项之间重复,也可以通过“subItemGroup”来重复,也可以重复。我有这个想法,我想要做一些LINQ分组,但不确定要分组的是什么?
class Item
{
string itemCode;
List<SubItem> subItems;
}
class SubItem
{
string subItemCode;
string subItemGroup;
List<string> validParentItems;
}
所以,我的想法是做一些像
这样的事情 var results = from item in ItemList
from subItem in item.subItems
group subItem by ???????
那么,有关我如何对项目进行分组的指针吗?
注意:在有人说之前,不要做作业。当我能够获得更高效的东西时,只是不要看到将头发撕裂的重点。没有必要重新发明轮子吗?
答案 0 :(得分:3)
试试这个:
var results = ItemList.SelectMany(i => i.subItems).GroupBy(i => i.subItemGroup);
答案 1 :(得分:1)
也许
var results = ItemList
.GroupBy(i => i.itemCode)
.Select(g => new{
itemcode = g.Key,
subItemGroups = g
.SelectMany(i => i.subItems)
.GroupBy(si => si.subItemGroup)
});
输出:
foreach (var grp in results)
{
string groupCode = grp.itemcode;
foreach (var subGrp in grp.subItemGroups)
{
string subItemGroup = subGrp.Key;
Console.WriteLine("groupCode:{0} subItemGroup:{1} codes:{2}"
, groupCode
, subItemGroup
, String.Join(",", subGrp.Select(si => si.subItemCode)));
}
}
答案 2 :(得分:0)
通过在new { item, subItem }
中选择group
,您可以在结果中同时包含item
和subItem
。您可以按代码或组进行分组,但我不明白您可能希望如何按两者进行分组,如您所说。以下是将两者分组为单独语句的代码:
var resultsByCode = from item in ItemList
from subItem in item.subItems
group new { item, subItem } by subItem.subItemCode;
var resultsByGroup = from item in ItemList
from subItem in item.subItems
group new { item, subItem } by subItem.subItemGroup;