首頁  >  文章  >  後端開發  >  如何使用 Contains() 和 Linq to Entities 有效率地查詢資料?

如何使用 Contains() 和 Linq to Entities 有效率地查詢資料?

Barbara Streisand
Barbara Streisand原創
2024-10-29 07:12:03640瀏覽

How Do I Query for Data Efficiently Using Contains() with Linq to Entities?

使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn