在项目列表上调用SelectMany并从列表中返回项目作为参数

时间:2017-11-26 21:42:17

标签: c# linq

我有以下查询,我在列表列表中使用SelectMany,然后使用GroupBy' Name'并且计算'列表并将值存储在'值'和' Count'。

var groups = originalList.SelectMany(fullList => fullList.ListOfItems, (fullList, details) => new { fullList.Name, fullList.ListOfItems })
                                   .GroupBy(x => x.Name,
                                    x => x.ListOfItems.Count())
                                   .Select(g => new { Name = g.Key, Count = g.Count()});

//Do something with results        
foreach (var item in groups)
{
    var name = item.Name;
    var count = item.Count;
}

现在我想将实际的ListOfItems传递给我的最终组,因为我也想访问它。

所以我想最终:

foreach (var item in groups)
{
    var value = item.Name;
    var count = item.Count;
    var list  = item.ListOfItems.   <-- I want this also
}

如何修改此查询以执行此操作?

1 个答案:

答案 0 :(得分:0)

你的查询做得太多了。它创建的对象复制Name的次数与每个ListOfItems中的项目数相同,然后您必须再次使用GroupBy重复删除Name

自然群体已经存在:originalList本身。您只需从该列表中选择项目并返回其ListOfItems及其计数:

from org in originalList
select new
{
    org.Name,
    Count = org.ListOfItems.Count(),
    Items = org.ListOfItems
}