ホームページ > バックエンド開発 > C++ > Linq to Entities で Contains() を使用して効率的にデータをクエリするにはどうすればよいですか?

Linq to Entities で Contains() を使用して効率的にデータをクエリするにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-29 07:12:03
オリジナル
649 人が閲覧しました

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

Linq to Entities を使用した Contains() によるデータの効率的なクエリ

データ アクセスにおける一般的な要件の 1 つは、次のリストに基づいてフィルター処理することです。価値観。多くのプログラミング言語で使用できる「Contains()」メソッドを使用すると、このタスクが簡素化されます。ただし、Microsoft の Entity Framework で使用される Linq to Entities には、最近までこの機能がありませんでした。

「Any()」を使用した回避策の作成

当初、試みは回避策として 'Any()' メソッドを使用するようにしました:

var q = from t in svc.OpenTransaction
        where txnIds.Any<long>(tt => tt == t.OpenTransactionId)
        select t;
ログイン後にコピー

ただし、このアプローチでは、サポートされていない 'Any' メソッドによりエラーが発生しました。

サポート ' Entity Framework 4 以降の Contains()'

偶然なことに、Entity Framework 4 以降では、'Contains()' メソッドがネイティブにサポートされています。これは、次のコードを使用して値のリストに基づいてフィルタリングできることを意味します:

var q = from t in svc.OpenTransaction
        where txnIds.Contains(t.OpenTransactionId)
        select t;
ログイン後にコピー

4 未満の EF バージョンに対するカスタム拡張メソッドの使用

For EF バージョン 4 より前の場合、カスタム拡張メソッドを実装して、「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 クエリのデータを効果的にフィルターできます。

以上がLinq to Entities で Contains() を使用して効率的にデータをクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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