使用 Linq to Entities 透過 Contains() 高效查詢資料
資料存取中的一個常見要求是根據以下清單進行過濾價值觀。許多程式語言中都提供了「Contains()」方法,可以簡化此任務。然而,與 Microsoft 實體框架一起使用的 Linq to Entities 直到最近才缺少此功能。
使用「Any()」建立解決方法
最初,嘗試是使用「Any()」方法作為解決方法:
var q = from t in svc.OpenTransaction where txnIds.Any<long>(tt => tt == t.OpenTransactionId) select t;
但是,由於不支援「Any」方法,此方法遇到錯誤。
支援'實體框架4 及以上版本中的Contains()'
幸運的是,從Entity Framework 4 開始,原生支援「Contains()」方法。這意味著可以使用以下程式碼根據值列表進行過濾:
var q = from t in svc.OpenTransaction where txnIds.Contains(t.OpenTransactionId) select t;
對低於4 的EF 版本使用自訂擴充方法
For在4 之前在的EF 版本中,可以實作自訂擴充方法來提供「Contains()」解決方法:
public static IQueryable<TEntity> WhereIn<TEntity, TValue> ( this ObjectQuery<TEntity> query, Expression<Func<TEntity, TValue>> selector, IEnumerable<TValue> collection ) { // ... Implementation goes here }
自訂擴充方法的使用
要使用擴充方法,請傳入選擇器表達式和要過濾的值清單:
var contacts = context.Contacts.WhereIn(c => c.Name, GetContactNames());
透過此解決方法,您可以使用Contains() 有效過濾Linq to Entities 查詢中的資料。
以上是如何使用 Contains() 和 Linq to Entities 有效率地查詢資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!