【问题标题】:Greater Than Condition in Linq JoinLinq 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;

【问题讨论】:

    标签: linq join conditional


    【解决方案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);
        

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-24
          • 2011-04-30
          • 2011-09-13
          • 1970-01-01
          相关资源
          最近更新 更多