Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Entity framework 使用联接、分组依据和求和将SQL映射到实体框架查询_Entity Framework_Linq_Group By_Linq To Entities - Fatal编程技术网

Entity framework 使用联接、分组依据和求和将SQL映射到实体框架查询

Entity framework 使用联接、分组依据和求和将SQL映射到实体框架查询,entity-framework,linq,group-by,linq-to-entities,Entity Framework,Linq,Group By,Linq To Entities,我想将下面的SQL映射到EF查询。我发现了一些类似的主题,但仍然未能实现映射。{0}…{2}是SQL参数 SELECT TaskGroup.Project AS Project SUM(Datediff(minute, WorkLog.StartTime, WorkLog.EndTime)) / 60 AS Hours FROM WorkLog INNER JOIN TaskDefinition ON WorkLog.TaskDefinitionID = TaskDefinition.ID IN

我想将下面的SQL映射到EF查询。我发现了一些类似的主题,但仍然未能实现映射。{0}…{2}是SQL参数

SELECT TaskGroup.Project AS Project
SUM(Datediff(minute, WorkLog.StartTime, WorkLog.EndTime)) / 60 AS Hours
FROM WorkLog INNER JOIN TaskDefinition ON WorkLog.TaskDefinitionID = TaskDefinition.ID
INNER JOIN TaskGroup ON TaskDefinition.TaskGroupID = TaskGroup.ID
WHERE WorkLog.EmployeeID = {0} AND WorkLog.Status = 5 AND
   WorkLog.StartTime >= {1} AND WorkLog.EndTime < {2}
GROUP BY TaskGroup.Project
选择任务组。项目作为项目
总和(Datediff(分钟,WorkLog.StartTime,WorkLog.EndTime))/60小时
从WorkLog.TaskDefinitionID=TaskDefinition.ID上的WorkLog内部联接TaskDefinition
TaskDefinition.TaskGroupID=TaskGroup.ID上的内部联接任务组
其中WorkLog.EmployeeID={0}和WorkLog.Status=5和
WorkLog.StartTime>={1}和WorkLog.EndTime<{2}
按任务组分组。项目
这个怎么样

var query = (from wl in WorkLog
            join td in TaskDefinition on wl.TaskDefinitionID equals td.ID
            join tg in TaskGroup on td.TaskGroupID equals tg.ID
            where wl.EmployeeID == { 0} && wl.Status == 5 
                && wl.StartTime >= { 1} && wl.EndTime < { 2}
            select new
            {
                Project = tg.Project,
                StartTime = wl.StartTime,
                EndTime = wl.EndTime
            })
            .GroupBy(o => o.Project)
            .Select(g => new
            {
                Project = g.Key,
                Hours = g.Sum(o => (o.EndTime - o.StartTime).Minutes) / 60
            });
var query=(来自WorkLog中的wl)
在wl上的TaskDefinition中加入td。TaskDefinitionID等于td.ID
在td.TaskGroupID等于tg.ID的任务组中加入tg
其中wl.EmployeeID=={0}&&wl.Status==5
&&wl.StartTime>={1}&&wl.EndTime<{2}
选择新的
{
Project=tg.Project,
StartTime=wl.StartTime,
EndTime=wl.EndTime
})
.GroupBy(o=>o.Project)
.选择(g=>new
{
项目=g.键,
小时=g.Sum(o=>(o.EndTime-o.StartTime).Minutes)/60
});
这个怎么样

var query = (from wl in WorkLog
            join td in TaskDefinition on wl.TaskDefinitionID equals td.ID
            join tg in TaskGroup on td.TaskGroupID equals tg.ID
            where wl.EmployeeID == { 0} && wl.Status == 5 
                && wl.StartTime >= { 1} && wl.EndTime < { 2}
            select new
            {
                Project = tg.Project,
                StartTime = wl.StartTime,
                EndTime = wl.EndTime
            })
            .GroupBy(o => o.Project)
            .Select(g => new
            {
                Project = g.Key,
                Hours = g.Sum(o => (o.EndTime - o.StartTime).Minutes) / 60
            });
var query=(来自WorkLog中的wl)
在wl上的TaskDefinition中加入td。TaskDefinitionID等于td.ID
在td.TaskGroupID等于tg.ID的任务组中加入tg
其中wl.EmployeeID=={0}&&wl.Status==5
&&wl.StartTime>={1}&&wl.EndTime<{2}
选择新的
{
Project=tg.Project,
StartTime=wl.StartTime,
EndTime=wl.EndTime
})
.GroupBy(o=>o.Project)
.选择(g=>new
{
项目=g.键,
小时=g.Sum(o=>(o.EndTime-o.StartTime).Minutes)/60
});

我会将此标记为已解决,但请注意:GROUP BY不会在DB服务器上执行,而是在本地执行。这意味着必须从服务器检索所有相关的数据行,对于大型表来说,这是一个巨大的性能损失。NET Core 2似乎还不能通过查询创建高效的组。您确定吗?我刚刚测试了一个类似的查询(join、select、groupby和select),并使用
context.Database.Log=s=>System.Diagnostics.Debug.Write我注意到在SQL Server中只执行一个查询,而此查询正在执行group by(我没有使用EF Core,我在.Net Framework 4.6.1中使用EF 6.1.3)是的,如果您将本地分组设置为引发异常(而不是警告),则使用EF Core,确实发生了。我会将此标记为已解决,但请注意:GROUPBY不会在DB服务器上执行,而是在本地执行。这意味着必须从服务器检索所有相关的数据行,对于大型表来说,这是一个巨大的性能损失。NET Core 2似乎还不能通过查询创建高效的组。您确定吗?我刚刚测试了一个类似的查询(join、select、groupby和select),并使用
context.Database.Log=s=>System.Diagnostics.Debug.Write我注意到在SQL Server中只执行一个查询,而此查询正在执行group by(我没有使用EF Core,我在.Net Framework 4.6.1中使用EF 6.1.3)是的,对于EF Core,如果您将本地分组设置为引发异常(而不是警告),则会发生异常。