C# Linq到Sql,用于计算和平均一组数据(无分组)

C# Linq到Sql,用于计算和平均一组数据(无分组),c#,linq-to-sql,C#,Linq To Sql,我想执行一个LINQtoSQL语句,它捕获(过滤)数据集中的计数和平均值。我所做的一切都是可行的,但它需要对数据库进行两次查询,而在一次查询中应该可以做到这一点 有趣的是,当我使用GROUPBY子句时,我可以得到一个要发出的查询 例如: select count(*), avg(duration) from events 我的linq看起来像这样: var x = from e in db.events select e; x = from i in x where i

我想执行一个LINQtoSQL语句,它捕获(过滤)数据集中的计数和平均值。我所做的一切都是可行的,但它需要对数据库进行两次查询,而在一次查询中应该可以做到这一点

有趣的是,当我使用GROUPBY子句时,我可以得到一个要发出的查询

例如:

select count(*), avg(duration) from events
我的linq看起来像这样:

var x = from e in db.events
        select e;
x = from i in x
    where i.NAME == "foo"
    select i;

return new {
    count = x.Count(),
    avgDuration = x.Average(e => e.Duration)
    };
使用该代码,我得到两个查询:

SELECT AVG([t0].[DURATION]) AS [value] FROM [dbo].[EVENTS] AS [t0]


还有其他方法吗?

我能得到的最好方法是嵌套子查询:

var x = from e in db.events 
        group e by 1 into grp
        select new { 
            count = grp.Count(), 
            avgDuration = grp.Average(x => x.Duration) }
根据LINQPad,这将输出SQL:

DECLARE @p0 Int = 1

SELECT COUNT(*) AS [count], AVG([t1].[Amount]) AS [avgDuration]
FROM (
    SELECT @p0 AS [value], [t0].[Duration]
    FROM Events AS [t0]
    ) AS [t1]
GROUP BY [t1].[value]

从你给出的代码来看,看起来你只会得到一行两列(count,avgDuration)这是期望的结果吗?是的,这是一个表的快速快照-高查询率(对于仪表板图)哇,linq从来没有停止过让我惊讶的事情可以做什么,用来得到它的sql和用来完成任务的有趣代码+1
DECLARE @p0 Int = 1

SELECT COUNT(*) AS [count], AVG([t1].[Amount]) AS [avgDuration]
FROM (
    SELECT @p0 AS [value], [t0].[Duration]
    FROM Events AS [t0]
    ) AS [t1]
GROUP BY [t1].[value]