ホームページ > バックエンド開発 > C++ > 「Contains()」を使用せずに Linq to Entities で ID のリストを使用してエンティティをフィルターする方法

「Contains()」を使用せずに Linq to Entities で ID のリストを使用してエンティティをフィルターする方法

Patricia Arquette
リリース: 2024-11-02 04:00:30
オリジナル
940 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート