【问题标题】:Need help converting a nested SQL statement to LINQ需要帮助将嵌套 SQL 语句转换为 LINQ
【发布时间】:2009-04-30 21:03:53
【问题描述】:

我有一个与此类似的语句,我需要在 Linq 中运行。我开始使用 .Contains,并且可以让第一层工作,但似乎无法掌握我需要做什么才能获得其他层。

这是 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'
            )
        )
    )

【问题讨论】:

    标签: c# sql linq linq-to-sql


    【解决方案1】:

    嗯,最简单的翻译是:

    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;
    

    我还没有检查,但我认为他们会做同样的事情......

    【讨论】:

    • 这就是我所需要的。唯一的补充是在 .Contains 语句中定义类型。即:.Contains((Guid) a.aTableId)
    • 是的,虽然这两个选项的 SQL 不同,但执行计划是相同的。使用 Joins 的第二个选项是一个更具可读性的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多