无法在linq

时间:2016-07-09 18:44:16

标签: c# asp.net linq

我只想像在sql中那样做一个简单的总和。我正在使用EF6和T4模板,如果这有任何区别。数据库优先设计。

  

从tblPayemtns选择SUM(付款),其中customerNo = 2322

我认为应该做这样的事情。

 var _myPayments = from c in portalEntities.tblPortalPayments.Where(p => p.userId == _userID)
                          group by c.paymentDate
                          select new
                          {
                              Sum = 
                          };

但我似乎无法访问sum arggergate函数当我去c.Sum它不在列表中只是字段名称可用我是我调用我的linq错误能够做到这一点我想要的是Sum = sum(c.paymentsToDate)。

在有人要求之前我不是这就是我的门户网站诱惑功能它只会为我保留一些新的实体以保持我的代码清洁。

public portalEntities _portalEntities;
   public portalEntities portalEntities
    {
        get
        {
            if (_portalEntities == null)
            {
                try
                {
                    _portalEntities = new portalEntities();
                }
                catch (Exception ex)
                {
                }
            }

            return _portalEntities;
 }

2 个答案:

答案 0 :(得分:2)

您只需要将付款列的分组结果相加:

var _myPayments = from c in portalEntities.tblPortalPayments
                                          .Where(p => p.userId == _userID)
                  group c by c.paymentDate into g
                  select new
                  {
                       Sum = g.Sum(x=>x.Payment)
                  };

<击> 更简单的方法是选择列,然后通过保留不必要的group by子句来对行求和:

var Sum = (from c in portalEntities.tblPortalPayments
                                   .Where(p => p.userId == _userID)
           select c.Payment).Sum();

或其他方式可以是:

var Sum = portalEntities.tblPortalPayments
                        .Where(p => p.userId == _userID)
                        .Sum(x=>x.Payment);

答案 1 :(得分:0)

你可以这样做:

var _myPayments = 
         from c in portalEntities.tblPortalPayments.Where(p => p.userId == _userID)
         group by c.paymentDate
         select new
         {

         }.Sum();

您还可以使用lambda表达式来执行查询:

var _myPayments = portalEntities.tblPortalPayments.Where(p => p.userId == _userID).Sum(x => x.Payments);