c# - LINQ 过滤和聚合

标签 c# linq grouping aggregation

我有一个可以这样表示的项目列表:

ClientNo     Name     Date        Time
0001         Mike     01/12/2000    6
0002         Dave     01/12/2000   12
0001         Mike     01/12/2000   10
0002         Dave     02/12/2000    6

是否可以使用 LINQ 对其进行分组和聚合以使其看起来像这样?

ClientNo     Name     Date        Time
0001         Mike     01/12/2000  16
0002         Dave     01/12/2000  12
0002         Dave     02/12/2000   6

我正在尝试为特定日期的每个客户返回一个汇总行。我一直在摆弄以下内容,但无法正确处理。不幸的是,我对 LINQ 的了解很差。

var result = from p in ListofModel
             group p by new { p.ClientNo, p.Date, p.Name, p.Time } into g
             orderby g.key.Date
             select new ModelClass
             {
                 ClientNo = g.Key.ClientNo,
                 Name = g.key.Name,
                 .....
             }

毫不奇怪,这并没有给我想要的结果。如何修复?

最佳答案

我认为它应该是这样的:

from p in ListofModel
group p by new { p.ClientNo, p.Date, p.Name } into g
orderby g.key.Date
select new ModelClass
{
    ClientNo = g.Key.ClientNo,
    Name = g.key.Name,
    Date = g.Key.Date,
    Time = g.Sum(x => x.Time)
}

你不想按时间分组,所以不应该包含在分组 key 中。

关于c# - LINQ 过滤和聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6263127/

相关文章:

python - 对具有最接近值的整数列表进行分组

r - 如果并集,则对文本进行分组

C# #import 从缺失的类型库中引用了一个类型; '__missing_type__' 用作占位符

c# - 动态创建 UI 和数据库,最好的方法是什么?

entity-framework - 给定要映射的 T 的属性名称,如何创建 Expression<Func<T, T>> ?

c# - 组合或连接从单独的 XML 文件中读取的对象的最有效方法

php - 根据用户和创建时间对 php 数组项进行分组

c# - 像图片一样调整表单大小

c# - ASP.NET Core 应用程序的 EF Code First 迁移替代方案

c# - 获取父设备