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嗯,我会密切关注它 - 谢谢你的支持! –