代码之家  ›  专栏  ›  技术社区  ›  Nap

Linq Join中的大于条件

  •  25
  • Nap  · 技术社区  · 14 年前

    我曾试图有条件地联接两个表,但它给了我语法错误。我试图在网上找到解决办法,但我找不到如何用condition做条件连接。唯一的替代方法是首先从一个表中获取值,然后再次进行查询。

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

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

    from e in entity.M_Employee
    join p in entity.M_Position on e.PostionId >= p.PositionId
    select p;
    
    3 回复  |  直到 14 年前
        1
  •  47
  •   Jon Skeet    14 年前

    使用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));
    
        2
  •  5
  •   michal.jakubeczy    8 年前

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

        3
  •  0
  •   Andrew Day    8 年前
    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);
    

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