如何将列表列表分组为重复项目

时间:2013-10-07 13:16:15

标签: c# linq

我有一个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 ???????

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

注意:在有人说之前,不要做作业。当我能够获得更高效的东西时,只是不要看到将头发撕裂的重点。没有必要重新发明轮子吗?

3 个答案:

答案 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,您可以在结果中同时包含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;