Linq加入的大于条件

时间:2010-09-16 08:39:52

标签: linq join conditional

我曾尝试有条件地加入两个表,但它给了我语法错误。我试图在网上找到解决方案,但我找不到如何用条件进行条件连接。唯一的另一种选择是从一个表中获取值并再次进行查询。

我只是想确认是否有其他方法可以使用linq进行条件连接。

这是我的代码,我试图找到所有等于或低于我的位置。基本上我想让我的同龄人和下属。

from e in entity.M_Employee
join p in entity.M_Position on e.PostionId >= p.PositionId
select p;

3 个答案:

答案 0 :(得分:41)

使用LINQ连接不能这样做 - LINQ仅支持 equijoins 。但是,您可以这样做:

var query = from e in entity.M_Employee
            from p in entity.M_Position
            where e.PostionId >= p.PositionId
            select p;

或稍微替代但等效的方法:

var query = entity.M_Employee
                  .SelectMany(e => entity.M_Position
                                      .Where(p => e.PostionId >= p.PositionId));

答案 1 :(得分:3)

下列的程序:

from e in entity.M_Employee
from p in entity.M_Position.Where(p => e.PostionId >= p.PositionId)
select p;

将生成与(INNER JOIN Position P ON E..PostionId >= P.PositionId).

之后完全相同的SQL

答案 2 :(得分:0)

var currentDetails = from c in customers
                  group c by new { c.Name, c.Authed } into g
                  where g.Key.Authed == "True"
                  select g.OrderByDescending(t => t.EffectiveDate).First();

var currentAndUnauthorised = (from c in customers
                           join cd in currentDetails
                           on c.Name equals cd.Name
                           where c.EffectiveDate >= cd.EffectiveDate
                           select c).OrderBy(o => o.CoverId).ThenBy(o => o.EffectiveDate);

如果您有一份历史细节更改表,包括授权状态和生效日期。第一个查询查找每个客户的当前详细信息,第二个查询在表中添加所有后续未经授权的详细信息更改。

希望这是有帮助的,因为它花了我一些时间并帮助获得。