2010-09-16 45 views
24

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

我只是想确认是否有任何其他方式与linq做条件连接。

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

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

回答

36

你不能这样做与LINQ加入 - LINQ仅支持等值连接。但是,你可以这样做:

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)); 
+0

哦。所以交叉连接可以工作...谢谢 – Nap 2010-09-16 09:04:20

2

以下:

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

会产生正是你所追求同一个SQL (INNER JOIN Position P ON E..PostionId >= P.PositionId).

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

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

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