1

我有一个 C# 问题。我有一个类型项目的对象列表。我需要对所有这些“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 ???????

那么,任何关于如何对我的项目进行分组的指针?

注意:在任何人说之前,不是功课。当我可以继续做一些更有成效的事情时,只是看不到把头发扯下来的意义。重新发明轮子没有意义吗?

4

3 回答 3

3

尝试这个:

var results = ItemList.SelectMany(i => i.subItems).GroupBy(i => i.subItemGroup);
于 2013-10-07T13:22:20.793 回答
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)));
    }
}
于 2013-10-07T13:22:21.560 回答
0

通过new { item, subItem }在您的 中选择group,您可以在结果中同时包含itemsubItem。您可以按代码或组进行分组,但我不明白您可能希望如何按两者进行分组,正如您所说的那样。这是将两者分组为单独语句的代码:

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;
于 2013-10-07T13:23:35.530 回答