Linq Join 中的大于条件

Posted

技术标签:

【中文标题】Linq Join 中的大于条件【英文标题】:Greater Than Condition in Linq Join 【发布时间】:2011-04-13 02:34:31 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

你不能用 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));

【讨论】:

【参考方案2】:

以下:

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

【讨论】:

【参考方案3】:
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);

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

希望这对我有所帮助,因为我也花了一些时间并有所帮助。

【讨论】:

以上是关于Linq Join 中的大于条件的主要内容,如果未能解决你的问题,请参考以下文章

join 子句中的表达式之一的类型不正确。对“加入”的调用中的类型推断失败。-具有多个条件的 Linq JOIN

c# Linq left join 多个条件连接查询

LINQ 多条件join on

Linq join on 多条件

在LINQ中实现多条件联合主键LEFT JOIN

dplyr left_join 小于,大于条件