2009-04-30 138 views
0

我有一个类似于我需要在Linq中运行的语句。我开始使用.Contains的道路,并且可以让第一层工作,但似乎无法掌握我需要做什么来获得更多层。需要帮助将嵌套的SQL语句转换为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' 
      ) 
     ) 
    ) 

回答

3

好,最简单的翻译是:

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; 

我没有检查,但我认为他们会做sa我的事...

+0

这就是我需要的。唯一的补充是在.Contains语句中定义类型。 即:.Contains((Guid)a.aTableId) – 2009-04-30 21:31:17