ホームページ  >  記事  >  バックエンド開発  >  Linq to Entities で「Contains()」機能を実装するにはどうすればよいですか?

Linq to Entities で「Contains()」機能を実装するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-31 12:02:02371ブラウズ

How to Implement 'Contains()' Functionality in Linq to Entities?

Linq to Entities を使用して 'Contains()' を実装するための回避策

'Contains()' メソッドは、Linq to Entities では本質的にサポートされていません。エンティティ。クエリ内で ID のコレクションを操作するときに問題が発生します。ここでは、この制限に対処する実行可能なソリューションを紹介します。

解決策:

サポートされていない 'Contains()' メソッドを置き換えるために、'Any() を利用します。 ' メソッドを代わりに使用します:

var q = from t in svc.OpenTransaction
        where txnIds.Any<long>(tt => tt == t.OpenTransactionId)
        select t;

ただし、この変更では、Linq to Entities のコンテキストで 'Any()' がサポートされない問題には対処していません。これを解決するために、代替アプローチを提供します。

public static IQueryable<TEntity> WhereIn<TEntity, TValue>
(
this ObjectQuery<TEntity> query,
Expression<Func<TEntity, TValue>> selector,
IEnumerable<TValue> collection
)

この拡張メソッドを使用すると、さまざまなエンティティ タイプとプロパティにフィルターを適用できます。

使用例:

次のコードは、「WhereIn()」メソッドの利用方法を示しています。

using (MyObjectContext context = new MyObjectContext())
{
  //Using method 1 - collection provided as collection
  var contacts1 = context.Contacts.WhereIn(c => c.Name, GetContactNames());

  //Using method 2 - collection provided statically
  var contacts2 = context.Contacts.WhereIn(c => c.Name,
    "Contact1",
    "Contact2",
    "Contact3",
    "Contact4"
    );
}

このソリューションを採用することで、「Contains()」の機能を取得しながら、 Linq to Entities により、クエリの柔軟性が向上します。

以上がLinq to Entities で「Contains()」機能を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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