簡體   English   中英

使用.contains()和linq-to-sql

[英]using .Contains() with linq-to-sql

我有以下查詢接收一個int列表作為參數:

public int GetMostRecent(List<int> TheIDs)
{
 ...using MyDC...

   var TheMostRecentID = (from d in MyDC.Data
                           where TheIDs.Contains(d.ID)
                           orderby d.DateTime
                           select d.ID).LastOrDefault(); 
}

這是將參數集合中的列表與數據庫中的數據進行匹配的最佳方法,還是比使用linq-to-sql中的.Contains()方法更好的方法。

謝謝。

你有什么是正確的。 這將被轉換為SQL中的IN子句,其中包含集合中提供的值。

在不相關的注釋中,您應該嘗試按日期降序排序查詢並使用FirstOrDefault() 就像現在一樣,你將把整個結果集帶回來並扔掉除了一行之外的每一行。

你應該小心使用linq query list.Contains()進行此類linq query 因為對於每個列表元素,它將在sql statement創建一個參數

並且在sql語句中允許的參數數量有限, <= 2100 因此,如果您的TheID將包含超過2100元素,它將失敗

如果你想以這種方式使用,你應該至少檢查一下你的TheIDs count ,如果超過2100 ,則將它們分成少於2100元素。

這將轉化為高效的SQL,因此不需要使用其他任何東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM