好吧,這是棘手的問題這裏是你會怎麼做在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()});
但後來我只得到一行。每個項目我都需要一行。 – spitzbuaamy 2013-02-20 09:11:05
@spitzbuaamy檢查編輯,我提出了2個版本。 – Andrey 2013-02-20 10:43:35