具有多个联接和分组依据的LINQ版本的SQL查询

时间:2020-07-29 21:59:22

标签: c# sql sql-server linq

我有一个SQL查询,试图将其重写为LINQ。我已经完成了它的左联接方面,但是我无法将它与按组组合在一起。

这是可以正常运行并完美执行的SQL查询:

select count(c.ID) as NoteCount, count(s.StatusHistoryID) as ActionCount, p.DayGoal
from Collector_Profile p 
left join StatusHistory s on s.AppUserID = p.AppUserID 
and CONVERT(varchar(10), s.StatusDateTZ, 101) = convert(varchar(10), GETDATE(), 101)
left join Claim_Notes c on c.CollectorID = p.ID 
and CONVERT(varchar(10),c.PostDateTZ,101) = convert(varchar(10), GETDATE(), 101)
where p.ID = 1338
group by p.DayGoal

到目前为止,我对LINQ查询的了解如下:

var query = from p in _context.Collector_Profile 
    join s in _context.StatusHistory on p.AppUserID equals s.AppUserID into gs
    join c in _context.Claim_Notes on p.ID equals c.CollectorID into gc
    from s in gs.DefaultIfEmpty()
    from c in gc.DefaultIfEmpty()
    where p.ID == CollectorID
    group p by p.DayGoal into grouped

但是我不知道如何处理日期比较以这种方式将日期截断,并且我也不知道如何从查询中选择结果。有人可以解释如何完成此任务吗?

1 个答案:

答案 0 :(得分:0)

您可以使用DbFunctions.TruncateTime方法仅比较日期部分。

DbFunctions.TruncateTime(s.StatusDateTZ)