首頁  >  文章  >  後端開發  >  如何在不使用「Contains()」的情況下在 Linq to Entities 中過濾具有 ID 清單的實體?

如何在不使用「Contains()」的情況下在 Linq to Entities 中過濾具有 ID 清單的實體?

Patricia Arquette
Patricia Arquette原創
2024-11-02 04:00:30841瀏覽

How to Filter Entities with a List of IDs in Linq to Entities without 'Contains()'?

Linq to Entities:使用擴充方法取代「Contains()」

不直接支援「Contains()」方法Lq to Entities,在根據ID 清單過濾實體時提出了挑戰。為了解決此限制,可以採用使用擴展方法的替代方法。

解決方案:

「WhereIn()」擴充方法為「Contains」提供了解決方法()」透過將比較轉換為一系列「Equals() 」表達式。這個擴充方法可以實現如下:

<code class="csharp">public static IQueryable<TEntity> WhereIn<TEntity, TValue>
(
    this ObjectQuery<TEntity> query,
    Expression<Func<TEntity, TValue>> selector,
    IEnumerable<TValue> collection
)
{
    // ... implementation details omitted ...
}</code>

用法:

'WhereIn()'方法可用於根據集合過濾實體ID:

<code class="csharp">List<long?> txnIds = new List<long?>();
// Fill txnIds

var q = from t in svc.OpenTransaction
        where txnIds.WhereIn(t => t.OpenTransactionId)
        select t;</code>

或者,如果ID 集合是靜態的,則可以直接將其提供給擴展方法:

<code class="csharp">var q = context.Contacts.WhereIn(c => c.Name,
      "Contact1",
      "Contact2",
      "Contact3",
      "Contact4"
      );</code>

注意:

在Entity Framework 版本4 及更高版本中,直接支援'Contains()' 方法,無需使用此處介紹了解決方法。

以上是如何在不使用「Contains()」的情況下在 Linq to Entities 中過濾具有 ID 清單的實體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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