좋아,이 까다로운 질문이다 :(사용하는 구문을 모르는 다음은 SQL에서 그것을 할 것입니다 방법이며 상대적으로 쉽다 :
난이도가 될 것입니다 Linq에로 변환
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
)
.이 내가 뭘하려하지만, 나는 그것을 테스트 할 수 있습니다.
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});
나는 그것을 조금 overcomplicated과는 group by
달성 할 수있다, 뭔가를 시도 할 수 있음 this :
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
@spitzbuaamy 편집을 확인하고, 나는 2 가지 버전을 제안했다. – Andrey