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