2013-04-23 77 views
1

我有一个SQL:获取一个字段的总和Linq中与GROUP BY

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中编写相同的代码,最后再编写相同的结果,我得不到相同的结果。

+0

你可以发布你试过的代码吗? – DevelopmentIsMyPassion 2013-04-23 09:16:03

+0

肯定等一下 – 2013-04-23 09:19:36

回答

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是你的上下文类。

+0

如果您使用单个键进行分组,那么您不需要为此创建匿名对象。此外,我建议你在短的情况下使用较短的变量名称(即在这种情况下'p'就足够了)。是的,你的查询应该会产生正确的结果。 – 2013-04-23 09:23:51