实体框架总和和平均值,不进行分组

本文关键字:框架 平均值 实体 | 更新日期: 2023-09-27 17:56:50

实体框架中有没有办法获取以下简单查询

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)
            })

有没有正确的方法来重写上面的查询,这样我们就可以避免不必要的分组

实体框架总和和平均值,不进行分组

使用组有问题吗?(顺便说一下,这可以按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 或者,通过将其编写为存储过程并将该 SP 映射到上下文,您可能会获得稍微更好的性能,这样您就可以说:

var query = myContext.MyStoredProcedure(companyId);

(例如)! 希望有帮助。

尝试研究使用存储函数,例如这些。 这些是特殊的存根函数,在运行时转换为内置存储函数。

http://msdn.microsoft.com/en-us/library/system.data.objects.sqlclient.sqlfunctions%28v=vs.110%29.aspx