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 中的大于条件的主要内容,如果未能解决你的问题,请参考以下文章