在LINQ中返回多个聚合列

BKa*_*una 9 aggregate linq-to-sql

我想将以下SQL转换为LINQ:

SELECT
    (Select count(BidID)) as TotalBidNum,
    (Select sum(Amount)) as TotalBidVal
FROM Bids
Run Code Online (Sandbox Code Playgroud)

我试过这个:

from b in _dataContext.Bids
select new { TotalBidVal = b.Sum(p => p.Amount), TotalBidNum = b.Count(p => p.BidId) }
Run Code Online (Sandbox Code Playgroud)

但是得到一个错误"Bids不包含"Sum"的定义,并且没有可以找到接受"Bids"类型的第一个参数的扩展方法"Sum".

我怎么能在LINQ中这样做?

谢谢

结论如下:

最后的答案是:

var ctx = _dataContext.Bids;

var itemsBid = (from b in _dataContext.Bids
               select new { TotalBidVal = ctx.Sum(p => p.Amount), TotalBidNum = ctx.Count() }).First();
Run Code Online (Sandbox Code Playgroud)

N R*_*ing 20

您可以使用编写此查询GroupBy.Lambda表达式如下:

    var itemsBid = db.Bids
                     .GroupBy( i => 1)
                     .Select( g => new
                     {
                          TotalBidVal = g.Sum(item => item.Amount), 
                          TotalBidNum = g.Count(item => item.BidId)
                     });
Run Code Online (Sandbox Code Playgroud)

  • @ Thomas.Benz表达式通过一个常量将可迭代对象分组,以便可迭代对象的所有元素最终都在一个组中。通常,使用GroupBy,您可以提供一个功能,以便将项目放入多个不同的组中 (2认同)

sca*_*tag 6

你可以尝试一下.变量b是一个实体(对于每次迭代),而ctx是一个具有所需扩展方法的实体集.

var ctx = _dataContext.Bids;

var result = ctx.Select(x => new {TotalBidVal = ctx.Sum(p => p.Amount),TotalBidNum = ctx.Count(p => p.BidId)}).First();
Run Code Online (Sandbox Code Playgroud)