有没有办法让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函数会自动为您忽略这些空值。此外,它导致通过网络发送的数据更少,计算速度更快。
有办法做到这一点吗?
发布于 2012-08-07 03:47:14
不,没有办法直接通过LINQ做到这一点。
您可以创建一个CLR aggregate,它实际上只是在SQL Server中包装STDEV aggregate,但这将是大量的额外工作(尽管这是可能的)。
然而,阻力最小的选项是对于每个您想要标准差的查询,您将创建一个执行操作的存储过程,然后使用LINQ- to -SQL调用该存储过程。
或者,如果你想在LINQ- to -SQL中使用组合,你可以使用create a user-defined table function in SQL server and then access that in LINQ-to-SQL来组合你的查询。
https://stackoverflow.com/questions/11833781
复制相似问题