【问题标题】:Get Sum of a field in Linq with Group by使用 Group by 获取 Linq 中某个字段的总和
【发布时间】:2013-04-23 09:13:34
【问题描述】:

我有一个 SQL:

 SELECT ApplicationNo,COUNT(ApplicationNo) AS CNT, SUM(Amount) as AMNT 
FROM Payments where (TYPE=1 AND Position=1)  and (Date>='2011-01-01')
and (Date<='2012-01-01')
GROUP BY ApplicationNo

有没有一种方法可以在 Linq 中进行转换?

var q = (from payments in context.Payments
                  where payments.Date >= fromdate && payments.Date <= todate
                  group payments by new { payments.ApplicationId } into g
                  select new
                  {
                      applicationId=g.Key,
                      Amount=g.Sum(a=>a.Amount)
                  });

如果我在 Linq 中编写相同的内容,然后最后使用 Group by,我将不会得到相同的结果。

【问题讨论】:

  • 您可以发布您尝试过的代码吗?

标签: c# sql linq group-by sum


【解决方案1】:
DateTime fromDate = new DateTime(2011, 1, 1);
DateTime toDate = new DateTime(2011, 1, 1);

var query = from p in db.Payments
            where p.Type == 1 && p.Position == 1 && 
            p.Date >= fromDate && p.Date <= toDate
            group p by p.ApplicationNo into g
            select new {
                 ApplicationNo = g.Key,
                 CNT = g.Count(),
                 AMNT = g.Sum(x => x.Amount)
           };

这里db 是您的上下文类。

【讨论】:

  • 如果您使用单键进行分组,那么您不需要为此创建匿名对象。另外我建议您在简短的上下文中使用较短的变量名(即在这种情况下p 就足够了)。是的,您的查询应该产生正确的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-21
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
相关资源
最近更新 更多