【问题标题】:LINQ to SQL - calling built-in aggregate functions (i.e. STDEV)LINQ to SQL - 调用内置聚合函数(即 STDEV)
【发布时间】:2012-08-07 04:49:56
【问题描述】:

有没有办法让 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 函数会自动为您忽略。此外,它可以减少通过线路发送的数据,并且计算速度更快。

有什么办法吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    或者,如果您想在 LINQ-to-SQL 中使用组合,您可以create a user-defined table function in SQL server and then access that in LINQ-to-SQL 并使用它来组合您的查询。

    【讨论】:

    • 我最终选择了一个存储过程。谢谢。
    猜你喜欢
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多