我曾尝试有条件地加入两个表,但它给了我语法错误。我试图在网上找到解决方案,但我找不到如何用条件进行条件连接。唯一的另一种选择是从一个表中获取值并再次进行查询。
我只是想确认是否有其他方法可以使用linq进行条件连接。
这是我的代码,我试图找到所有等于或低于我的位置。基本上我想让我的同龄人和下属。
from e in entity.M_Employee
join p in entity.M_Position on e.PostionId >= p.PositionId
select p;
答案 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).
答案 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);
如果您有一份历史细节更改表,包括授权状态和生效日期。第一个查询查找每个客户的当前详细信息,第二个查询在表中添加所有后续未经授权的详细信息更改。
希望这是有帮助的,因为它花了我一些时间并帮助获得。