LINQ to SQL - 调用内置聚合函数(即STDEV)

时间:2012-08-06 18:23:45

标签: c# sql linq aggregate-functions standard-deviation

有没有办法让LINQ直接将查询转换为SQL STDEV等函数?例如,LINQ

from t in table
group t by t.something into g
select new {
    avg = g.Average(o => o.number)
    stdev = g.?????
}

变成了SQL AVG。但是,LINQ中不支持标准偏差。

这里建议采用一种方法: Standard Deviation in LINQ

但是,这很笨重,它还需要一些额外的工作来处理可能的空值,sql STDEV函数会自动忽略它。此外,它可以减少通过线路发送的数据,并且计算速度更快。

有什么办法吗?

1 个答案:

答案 0 :(得分:0)

不,没有办法直接通过LINQ。

您可以创建一个CLR aggregate,它实际上只包含STDEV aggregate在SQL Server中,但这将是一个过度的工作(虽然 可能)。< / p>

但是,对于您希望标准偏差的每个查询,最小阻力的选项将是,您将创建一个执行操作的存储过程,然后使用LINQ-to-SQL来调用它。

或者,如果要在LINQ-to-SQL中使用合成,可以create a user-defined table function in SQL server and then access that in LINQ-to-SQL使用该合成来编写查询。