使用LINQ to SQL 處理IN 子查詢
在LINQ to SQL 中,您可能會遇到處理IN 子查詢的需要, SQL 中的常見操作。讓我們考慮一個場景:
問題:
我們如何將以下 SQL 查詢轉換為 LINQ to SQL?
SELECT f.* FROM Foo f WHERE f.FooId IN ( SELECT fb.FooId FROM FooBar fb WHERE fb.BarId = 1000 )
答案:
在LINQ to 實現這樣的查詢SQL,我們需要用到兩個概念:
1.子查詢作為鍵的集合:
我們先將子查詢定義為滿足IN 子句中的條件的鍵的集合。
var fooBarIds = from fb in context.FooBar where fb.BarId == 1000 select fb.FooId;
2。使用 Contains 方法查詢:
接下來,我們可以在鍵集合上使用 Contains 方法來檢查給定的 FooId 是否存在。
var result = from f in context.Foo where fooBarIds.Contains(f.FooId) select f;
此查詢將傳回所有Foo 表中的行,其中 FooId 存在於從檢索到的 FooId 集合中子查詢。
擴充用例:
同樣的原理可以用來實作其他子查詢運算,例如 EXISTS:
// EXISTS var q = from t1 in table1 let t2s = from t2 in table2 where <Conditions for table2> select t2.KeyField where t2s.Any(t1.KeyField) select t1;
以上是如何將 SQL 的 IN 子查詢轉換為 LINQ to SQL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!