ホームページ  >  記事  >  バックエンド開発  >  「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()' メソッドは、 では直接サポートされていません。 Linq 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。