2009-04-30 152 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