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
ベストアンサー1
解決策としては、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()
};
これによってまったく同じ SQL が生成されるわけではありませんが、同じ論理的な結果が提供されます。「複雑な」SQL クエリを LINQ に変換するのは、必ずしも簡単ではありません。