LINQ使用文字值连接

时间:2010-07-14 17:14:59

标签: linq linq-to-entities

这是一种假设,因为我正在考虑如何设计它。在连接条件中使用一些文字整数值来考虑此查询:

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 };

3 个答案:

答案 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};