1

是否有實體框架的方式得到以下簡單的查詢實體框架相加平均不進行分組

SQL查詢

select avg(totalsalary), avg(totalhours) from context.employeedetails where company = 1234 

在實體框架中,我們通過在這樣一個組,以便

employeedetails.Where(c => c.company = 1234).GroupBy(c => c.company).Select(x => new 
      { 
       avgsalary = x.Average(c => c.totalsalary), 
       = x.Average(c => c.totalhours) 
      }) 

是否有正確的方法來重寫上述查詢,以便我們可以避免不必要的組

回答

2

是否與使用組的問題嗎? (順便說一下,可以完成GroupBy(c => c)),因爲您已經使用了Where子句進行過濾。

這就是說,它不能(據我所知)可以在LINQ寫(不生成兩個查詢,而不是一個)。如果你很高興有兩個疑問的話,自然你可以這樣做:

var query = context.MyTable.Where(x => x.MyVal == 1); 

var querySelect = new 
{ 
    aveValue1 = query.Average(x => x.Property1), 
    aveValue2 = query.Average(x => x.Property2) 
}; 

...但如你所料,此執行速度較慢。

因此,我建議你使用已有的查詢,雖然改變的GroupBy略有OR或者你可以通過寫它作爲存儲過程和SP映射到您的場景中獲得稍好的性能,因此你可以說:

var query = myContext.MyStoredProcedure(companyId); 

(舉例)!希望有所幫助。

+0

是使用組時,因爲所生成的SQL是不同的存在是一個問題。我使用LinqPAD測試了它,並在數據庫服務器上產生了效率低下的SQL – user275157

+0

@ user275157嗯,我會密切關注它 - 謝謝你的支持! –