【问题标题】:SUM on multiple separate columns in LINQ在 LINQ 中的多个单独列上求和
【发布时间】:2014-07-28 11:09:08
【问题描述】:

有谁知道如何正确有效地对多列求和。

我有大量的加入查询

db.myTable.Join(...)
.Join(...)
.Join(...)
.Join(...)
.Join(...)
.Join(...)
.Where(...)

我现在需要做的是将 A、B、C 和 D 列相加,然后计算 E。

所以我有一个包含总和的记录。

我尝试使用 group by 和 Select(x => new myClass{A => x.})

以下是主要效率低下

myClass mine = new myClass{ 
            Number = myList.GroupBy(x => x.u.ID).Count(),
            Area = myList.Sum(a => a.u.Area ?? 0),
            Rent = myList.Sum(a => a.r.Rent ?? 0)   ,
            ERV = myList.Sum(a => a.e.ERV ?? 0)
        };

以下是高效的,但仅对第一个分组求和...

      myClass mine = (from p in myList
                            group p by p.u.ID into g
                            select  new myClass
                            { 
                                Number = g.Count(),
                            Area = g.Sum(a => a.u.Area ?? 0),
                            Rent = g.Sum(a => a.r.Rent ?? 0)   ,
                            ERV = g.Sum(a => a.e.ERV ?? 0)
        }).FirstOrDefault();

【问题讨论】:

  • 第二次查询only sums the first grouping是什么意思?
  • @Kaf 我想要所有租金的总和,也就是不分组。但我需要唯一 ID 的计数(不是唯一键)。第二个查询Groups by u.ID,对每个组内的值求和,然后只返回第一个组。 (FirstOrDefault) - 不知道如何对组求和,或者我是否做错了。
  • 第二个查询返回第一组,因为.FirstOrDefault()
  • 我不想要每个分组的摘要列表。我想要一个完整的摘要。
  • 那你为什么要按p.u.ID分组?

标签: c# sql linq sum


【解决方案1】:

我认为您正在尝试在单个记录中获取 Number 字段Distinct Count()ungrouped Sum() 的其他字段。

var mine = (from x in (from p in mc 
                       group p by p.u.id into g1
                       select new { 
                             Number = g1.Count(),
                             Area = g1.Sum(a => a.u.Area??0),
                             Rent = g1.Sum(a => a.u.Rent??0),
                             ERV = g1.Sum(a => a.e.ERV ?? 0)
                       })
                    group x by 1 into g2
                    select new myClass {
                             Number = g2.Count(),
                             Area = g2.Sum(a => a.Area),
                             Rent = g2.Sum(a => a.Rent),
                             ERV = g2.Sum(a => a.ERV)
                    }).FirstOrDefault();

【讨论】:

    猜你喜欢
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    相关资源
    最近更新 更多