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