使用Linq to SQL在一个查询中提供多个聚合函数 [英] Multiple aggregate functions in one query using Linq to SQL

查看:332
本文介绍了使用Linq to SQL在一个查询中提供多个聚合函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to achieve the following in 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> );

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

How can I apply multiple aggregate functions on different fields? Specifically, in a way, which won't cause the complicated conditions to be copied over and over in resulting query?

推荐答案

您可以使用按常量分组技巧,通过单个SQL查询(和共享的复杂过滤器)获取所有聚合:

You can use the group by constant trick to get all the aggregates with single SQL query (and shared complicated filter):

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();

这篇关于使用Linq to SQL在一个查询中提供多个聚合函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆