わかりました、これはトリッキーな質問です。これを SQL で行う方法は次のとおりで、比較的簡単です。
SELECT *
FROM Projects p
JOIN Timestamps t ON p.Guid = t.GuidProject
WHERE p.Finshed = FALSE AND
t.END = (
SELECT max(t1.END)
FROM Projects p1
JOIN Timestamps t1 ON p1.Guid = t1.GuidProject
WHERE p.Finshed = FALSE AND p.Guid = p1.Guid
)
それをLinqに変換するのはもっと難しいでしょう。これは私が試したものですが、テストできませんでした。
var baseQuery = _contextProvider.Context.Projects
.Join(_contextProvider.Context.Timestamps, p => p.Guid, t => t.GuidProject, (p, t) => new {p, t})
.Where(o => o.p.Finished == false);
var result = baseQuery.Select
.Where(o => o.t.End == baseQuery
.Where(o2 => o2.p == o.p)
.Select(o2 => o2.t.End)
.Max()
).Select( o => new {o.p.Name, o.t.End} );
私はそれを少し複雑にしすぎたのかもしれませんgroup by.
var result = (from p in _contextProvider.Context.Projects
join t in _contextProvider.Context.Timestamps on p.Guid equals t.GuidProject
where p.Finished == false
group t.End by p.Name into g
select new { name=g.Key, end=g.Max()} );