[英]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.