2014-02-05 122 views
0

我在我的SQL中嵌套了WHERE IN子句,這將如何轉換爲LINQ,使用lambda表達式的加分。所有這一切都是新的。嵌套WHERE IN子句SQL到LINQ

SELECT EndowmentID 
    FROM Criteria c 
WHERE c.ID IN(

     SELECT CriterionID 
     FROM Filters 
     WHERE ChoiceID IN(

       SELECT ChoiceID 
       FROM Responses 
       WHERE ApplicationID = 1 

      ) 

     ) 

回答

1

該查詢絕對可以提高使用連接...

SELECT EndowmentID 
FROM 
    Criteria C 
    JOIN Filters F ON C.ID = F.CriterionID 
    JOIN Responses R ON F.ChoiceID = R.ChoiceID 
WHERE R.ApplicationID = 1 

根據您的表的鍵,你可能需要SELECT DISTINCT

從那裏,你可以寫一個簡單的LINQ查詢:

from c in Criteria 
join f in Filters on c.ID equals f.CriterionID 
join r in Responses on f.ChoiceID equals r.ChoiceID 
where r.ApplicationID = 1 
select c.EndowmentID 

同樣,您可能必須Distinct()this。

+0

+1思維開箱就像我一樣盲目地端口查詢linq – hwcverwe

0
var result = 
    Criteria.Where(c => 
     Filters.Where(f =>  
      Responses.Where(r => r.ApplicationId == 1).Select(r => r.ChoiceId) 
       .Contains(f.ChoiceId) 
     ).Select(f => f.CriterionId) 
     .Contains(c.Id) 
    ).Select(c => EndowmentId);