2012-01-12 31 views
1

因此,我有一個約100k項目的列表(表格),我想檢索與給定列表匹配的所有值。EF-Linq表達式和使用Ints列表以獲得最佳性能

我有這樣的事情。 Table Sections鍵不是主鍵,所以我期望listOfKeys中的每個值都返回幾行。

List<int> listOfKeys = new List<int>(){1,3,44}; 
var allSections = Sections.Where(s => listOfKeys.Contains(s.id)); 

我不知道這是否有差別,但一般只listOfKeys將1至3項之間有。

我正在使用實體框架。

所以我的問題是,這是在LINQ表達式中包含一個列表的最好/最快的方式? 我假設使用另一個.NET數據對象不是更好。我應該使用聯盟還是其他?

感謝

回答

0

一個Join可能會更有效:

var allSections = 
    from s in Sections 
    join k in listOfKeys on s.id equals k 
    select s; 

或者,如果你喜歡的擴展方法的語法:

var allSections = Sections.Join(listOfKeys, s => s.id, k => k, (s, k) => s); 
1

假設listOfKeys將只包含小約的項目和它的本地列表(不是從數據庫),如< 50,那麼它是確定的。生成的查詢基本上是WHERE id in (...)WHERE id = ... OR id = ... ...,數據庫引擎可以處理它。

相關問題