【问题标题】:Multiple aggregate functions in one query using Linq to SQL [duplicate]使用 Linq to SQL 在一个查询中使用多个聚合函数 [重复]
【发布时间】:2023-04-07 04:34:02
【问题描述】:

我正在尝试在 LINQ (EF6) 中实现以下目标:

SELECT count(A), sum(B), average(C)
FROM TableA,
LEFT JOIN TableB ON ...
LEFT JOIN TableC ON ...
WHERE
    (very complicated conditions)

C# 代码如下所示:

IQueryable<Entity> = dbSet
    .Include(e => e.entityB)
    .Include(e => e.EntityC)
    .Where( <very complicated conditions> );

如何在不同的字段上应用多个聚合函数?具体来说,在某种程度上,这不会导致复杂的条件在结果查询中一遍又一遍地复制?

【问题讨论】:

标签: c# entity-framework linq aggregate-functions


【解决方案1】:

您可以使用 group by constant 技巧通过单个 SQL 查询(和共享复杂过滤器)获取所有聚合:

var result = dbSet
    .Where( <very complicated conditions> )
    .GroupBy(e => 1) // aribitrary value
    .Select(g => new
    {
        CountA = g.Count(),
        SumB = g.Sum(e => e.EntityB.PropertyB),
        AverageC = g.Average(e => e.EntityC.PropertyC),
    })
    .FirstOrDefault();

【讨论】:

    猜你喜欢
    • 2011-05-24
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多