use*_*157 2 c# entity-framework entity-framework-4.1 entity-framework-5
实体框架中有没有办法获得以下简单查询
SQL查询
select avg(totalsalary), avg(totalhours) from context.employeedetails where company = 1234
Run Code Online (Sandbox Code Playgroud)
在实体框架中,我们正在做一个分组,如下所示
employeedetails.Where(c => c.company = 1234).GroupBy(c => c.company).Select(x => new
{
avgsalary = x.Average(c => c.totalsalary),
= x.Average(c => c.totalhours)
})
Run Code Online (Sandbox Code Playgroud)
是否有正确的方法来重写上述查询,以便我们可以避免不必要的分组依据
使用群组有问题吗?(顺便说一句,可以这样做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)
};
Run Code Online (Sandbox Code Playgroud)
...但正如您所期望的,这执行得较慢。
因此,我建议您使用已有的查询,尽管稍微改变 GroupBy或者您可以通过将其编写为存储过程并将该 SP 映射到您的上下文来获得稍微更好的性能,这样您就可以说:
var query = myContext.MyStoredProcedure(companyId);
Run Code Online (Sandbox Code Playgroud)
(例如)!希望有帮助。