2

有没有办法让 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 中不支持标准偏差。

这里建议了一种方法: LINQ 中的标准偏差

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

有什么办法可以做到这一点?

4

1 回答 1

0

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

您可以创建一个CLR 聚合,它实际上只是将STDEV聚合包装在 SQL Server 中,但这将是大量的过度工作(尽管这可能的)。

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

或者,如果您想在 LINQ-to-SQL 中使用组合,您可以在 SQL Server 中创建一个用户定义的表函数,然后在 LINQ-to-SQL 中访问它并使用它来组合您的查询。

于 2012-08-06T19:47:14.127 回答