vzc*_*czc 19 c# linq left-join
SQL:
SELECT
u.id,
u.name,
isnull(MAX(h.dateCol), '1900-01-01') dateColWithDefault
FROM universe u
LEFT JOIN history h
ON u.id=h.id
AND h.dateCol<GETDATE()-1
GROUP BY u.Id, u.name
Run Code Online (Sandbox Code Playgroud)
解决方案,尽管将null值的处理推迟到代码,可能是:
DateTime昨天= DateTime.Now.Date.AddDays(-1);
var collection=
from u in db.Universe
select new
{
u.id,
u.name,
MaxDate =(DateTime?)
(
from h in db.History
where u.Id == h.Id
&& h.dateCol < yesterday
select h.dateCol
).Max()
};
Run Code Online (Sandbox Code Playgroud)
这不会产生完全相同的SQL,但确实提供相同的逻辑结果.将"复杂"SQL查询转换为LINQ并不总是直截了当的.