Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架总和和平均值,不分组_C#_Entity Framework_Entity Framework 5_Entity Framework 4.1 - Fatal编程技术网

C# 实体框架总和和平均值,不分组

C# 实体框架总和和平均值,不分组,c#,entity-framework,entity-framework-5,entity-framework-4.1,C#,Entity Framework,Entity Framework 5,Entity Framework 4.1,在实体框架中是否有方法获得以下简单查询 SQL查询 select avg(totalsalary), avg(totalhours) from context.employeedetails where company = 1234 在实体框架中,我们按照so中的方式进行分组 employeedetails.Where(c => c.company = 1234).GroupBy(c => c.company).Select(x => new {

在实体框架中是否有方法获得以下简单查询

SQL查询

select avg(totalsalary), avg(totalhours) from context.employeedetails where company = 1234
在实体框架中,我们按照so中的方式进行分组

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

(例如)!希望能有所帮助。

使用群组有问题吗?(顺便提一下,这可以作为
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);

(例如)!希望有帮助。

是的,使用group时会出现问题,因为生成的SQL不同。我使用LinqPAD对其进行了测试,在DB服务器上得到了低效的结果SQL@user275157嗯,我会留意的-谢谢你的提醒!是的,使用组时存在问题,因为生成的SQL不同。我使用LinqPAD对其进行了测试,在DB服务器上得到了低效的结果SQL@user275157嗯,我会留意的-谢谢你的提醒!