繁体   English   中英

我们如何使用Linq C#左连接,计数,总和在其中执行选择到另一个选择

[英]How can we perform a select into another select using Linq c# left join, count , sum, where

如何将我的sql代码转换为Linq格式:

我们如何使用Linq c#将一个选择转换为另一个选择:

我的SQL代码:

SELECT DepartementProjects.Label, a.Number FROM
(SELECT DepartementProjects.Label ,count(1) as Number FROM DepartementProjects
inner join Absences on DepartementProjects.Id = Absences.DepartementProjectID
where Absences.Profil='SHT'
group by DepartementProjects.Label ) a right join DepartementProjects on DepartementProjects.Label = a.Label;

我的尝试:

            var AbsByDepartmentADM = from department in _dbContext.DepartementProjects
                                 join abs in _dbContext.Absences on department.Id equals abs.DepartementProjectID
                                 into groupedResult 
                                 from groupedResultRight in groupedResult.DefaultIfEmpty()
                                 group groupedResultRight by department.Label into grouped
                                 let NumberOfAbsence = grouped.Count(t => t.DepartementProjectID != null)
                                 let WorkedHours = grouped.Sum(a => a.WorkedHours != null ? a.WorkedHours : 0)

                                  select new
                                  {
                                      DepartmentId = grouped.Key,
                                      NumberOfAbsence,
                                      WorkedHours,
                                      AbsencesHours = (8 * NumberOfAbsence - WorkedHours),

                                  };

如果要翻译SQL,请先翻译所有子选择,然后再翻译主选择,然后按LINQ短语顺序翻译。 另外,您的LINQ会在SQL中添加一些值,因此我没有尝试更改SQL以使其匹配:

var sub = from dept in _dbContext.DepartementProjects
      join abs in _dbContext.Absences on dept.Id equals abs.DepartementProjectID into absj
      from abs in absj
      where abs.Profil == "SHT"
      group abs by dept.Label into absg
      select new { Label = absg.Key, Number = absg.Count() };

var ans = from dept in _dbContext.DepartementProjects
      join a in sub on dept.Label equals a.Label into lnj
      from ln in lnj.DefaultIfEmpty()
      select new { dept.Label, ln.Number };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM