这是一种假设,因为我正在考虑如何设计它。在连接条件中使用一些文字整数值来考虑此查询:
Select *
From LeftPeople l
Inner Join RightPeople r On r.RecordId = l.RecordId and r.ResultId = 3 and l.ResultId = 7
这是否是LINQ中正确的等效项?如果这甚至可以起作用并且想知道是否有更好的方法,这似乎是一种麻烦。我想我可以把它放在where标准中。你觉得怎么样?
var query = from leftPerson in LeftPeople
join rightPerson in RightPeople on
new { RecordId = leftPerson.RecordId, RightResultId = 3, LeftResultId = leftPerson.ResultId }
equals new { RecordId = rightPerson.recordid, RightResultId = rightPerson.ResultId , LeftResultId = 7 }
select new { LeftPerson = leftPerson, RightPerson = rightPerson };
答案 0 :(得分:3)
如果您只想要RightResultId为3的项目,请使用Where子句过滤掉其他项目。我认为这不属于连接子句。它可能有用,但对我来说感觉很麻烦。
换句话说,我会这样做:
var query = from left in LeftPeople
where left.RightResultId = 3
join right in RightPeople.Where(r => r.LeftResultId = 7)
on left.RecordId equals right.RecordId
select new { LeftPerson = left, RightPerson = right };
这假设RecordId
确实是主键。
答案 1 :(得分:1)
LeftPeople.ResultId和RightPeople.ResultId的过滤器属于LINQ语句的Where子句:
var query = from l in LefPeople
join r in RightPeople on l.RecordId equals r.ResultId
where r.ResultId == 3 && l.ResultId == 7
select new { LeftPerson = l, RightPerson = r };
试图将它们变成了将其加入Join子句只会使您的查询难以阅读/理解。
那就是说,我可能会认为SQL Query也应该在WHERE子句中有这些过滤器。
答案 2 :(得分:1)
如果你建立了关联,你可以写:
from left in leftPeople
where left.ResultId == 7
from right in left.RightPeople
where right.ResultId == 3
select new {left, right};