2012-08-06 64 views
2

有沒有什麼辦法讓LINQ直接將查詢轉換成像SQL的STDEV這樣的函數?例如,LINQLINQ to SQL - 調用內置聚合函數(即STDEV)

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功能會自動忽略你。此外,它可以減少通過線路發送的數據,並且計算速度更快。

任何方式來做到這一點?

回答

0

不,沒有辦法直接通過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來編寫你的查詢。

+0

我結束了一個存儲過程。謝謝。 – 2012-08-14 00:41:46