代码之家  ›  专栏  ›  技术社区  ›  Levi Rosol

需要帮助将嵌套的SQL语句转换为LINQ

  •  0
  • Levi Rosol  · 技术社区  · 16 年前

    我有一个类似的语句,需要在linq中运行。我从使用的道路开始。包含,并能让第一层工作,但似乎无法掌握我需要做什么,以获得额外的层。

    下面是SQL语句:

    select * 
    from aTable
    where aTableId in
        (select aTableId from bTable
        where bTableId in 
            (select bTableId from cTable
            where cTableId in
                (select cTableId from dTable
                where dField = 'a guid'
                )
            )
        )
    
    1 回复  |  直到 16 年前
        1
  •  3
  •   Jon Skeet    16 年前

    最简单的翻译是:

    var query = from a in aTable
                where (from b in bTable
                       where (from c in cTable
                              where (from d in dTable
                                     where dField == "a guid"
                                     select d.cTableId)
                                    .Contains(c.cTableId)
                              select c.bTableId)
                             .Contains(b.bTableId)
                       select b.aTableId)
                       .Contains(a.aTableId)
                select a;
    

    但是,连接可能会非常简单:

    var query = from a in aTable
                join b in bTable on a.aTableId equals b.aTableId
                join c in cTable on b.bTableId equals c.bTableId
                join d in dTable on c.cTableId equals d.cTableId
                where d.dField == "a guid"
                select a;
    

    我还没检查,但是我 认为 他们会做同样的事…