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

时间:2021-10-30 22:35:20

I have a statement similar to this that I need to run in Linq. I started down the road of using .Contains, and can get the first tier to work, but cannot seem to grasp what I need to do to get additional tiers.

我有类似的声明,我需要在Linq中运行。我开始使用.Contains,可以让第一层工作,但似乎无法掌握我需要做什么来获得额外的层。

Here's the SQL statement:

这是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 个解决方案

#1


Well, the simplest translation would be:

嗯,最简单的翻译是:

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;

However, it's likely that a join would be significantly simpler:

但是,联接可能会更简单:

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;

I haven't checked, but I think they'll do the same thing...

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

#1


Well, the simplest translation would be:

嗯,最简单的翻译是:

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;

However, it's likely that a join would be significantly simpler:

但是,联接可能会更简单:

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;

I haven't checked, but I think they'll do the same thing...

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