如何将此SQL查询“转换”为Linq Lambda Expression:
Select SC.[Description],
COUNT(C.[StatusID]) as Amount
From [StatusCandidate] SC
Left Join
(Select *
From [Candidate] AS c
Where c.RequestID = 1) AS C
ON C.StatusID = SC.StatusCandidateID
Group By SC.[Description];
我试试,但结果不正确:
dbContext.StatusCandidates
.GroupJoin(
dbContext.Candidates.Where(u => u.RequestID == requestId),
x => x.StatusCandidateID,
y => y.StatusID,
(x, y) => new {x, y})
.GroupBy(g => new {g.x.Description})
.Select(z => new AmountStatus{
StatusName = z.Key.Description,
Amount = z.Count()
}).ToList();
答案 0 :(得分:4)
您非常接近所需的结果:您的LINQ进行内连接,而您的SQL有外连接。
dbContext.StatusCandidates
.GroupJoin(
dbContext.Candidates.Where(u => u.RequestID == requestId)
, x => x.StatusCandidateID
, y => y.StatusID
, (x, y) => new { StatusCandidate = x, StatusGroup = y }
)
.SelectMany(
x => x.StatusGroup.DefaultIfEmpty()
, (x, y) => new { x.StatusCandidate, Status = y}
)
.GroupBy(g => new { g.StatusCandidate.Description })
.Select(z => new AmountStatus{
StatusName = z.Key.Description
, Amount = z.Count()
}).ToList();
参考:How do you perform a left outer join using LINQ extension methods