提问者:小点点

C#LINQ-分组依据


我想对分组项目求和。 我希望保持简单的LINQ语法。

我需要在代码中修复,以获得关键的项目。 我试着像“g[g.key].count()”一样,它不起作用。

public class Order
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Group { get; set; }
}

public class Group
{
    public string GroupId { get; set; }
    public string Count { get; set; }
}     


**var groupedOrd = orders.GroupBy(f => f.Group);**
List<Group> groups = new List<Group>();
foreach(var g in groupedOrd)
{
   groups.Add(new Group() { GroupId = g.Key, Count = g[g.Key].Count() });
}

共2个答案

匿名用户

groupby返回igroupingIEnumerable,它实现IEnumerable,因此您只需执行G.count():

var groups  = groupedOrd
    .Select(g => new Group { GroupId = g.Key, Count = g.Count() } )
    .ToList();

由于某种原因,您的group.count属性也是一个字符串,因此您需要将其更改为int或执行g.count().toString()

匿名用户

您可以使用groupby的重载,它接受结果选择器func,tresult>

var groups = orders.GroupBy(o => o.Group,
        (group, results) => new Group { GroupId = group, Count = results.Count().ToString() })
    .ToList();

在您的示例中,结果选择器将是funcgroup>,您将为每个组传递带有组键的stringorderIEnumerable,并返回带有计算出的计数group新实例