私はこの問題の解決策を積極的に探していますが、スタック上の誰かがすでにこれを理解している場合、研究開発時間を短縮できると考えました。(オンラインで何も見つからなかったので、ここに行きます)
List<Expression<Func<T,bool>>>
構築中のアプリケーション フレームワークには、一連の述語 ( ) を取り込み、それを検索フレームワークで解析する機能が必要なケースがあります。
現在、次のようにフィルタリングする機能があります。
//Assume predicates is passed as a method argument.
// of List<Expression<Func<T,bool>>>
//Assume user is passed in as a method argument.
//Assume FilterToUserAccess is a custom extension method that restricts the dataset
// to access restrictions.
var query = _dbContext.Set<EntityType>()
.FilterToUserAccess(user);
foreach(var p in predicates){
query = query.Where(p);
}
return p.ToList();
これを行う必要がある理由は、フィルタリング可能なオブジェクトのスケーラビリティのためです。ただし、EF の組み込み機能を考えると、クイック検索ではこれは不可能です。私ができる必要があるのは:
オブジェクト A (レーシング カーのように仮定します) をクイック検索ボックスで検索し、メーカー、モデル、チーム、およびドライバーを検索します。したがって、「Earnhardt」と入力すると、メーカー、モデル、チーム、ドライバーのすべてのレース カー エンティティ プロパティが検索されます。すべての DEI 車と Dale Jr. を使用することになります。同じアプローチを使用して、検索可能なエンティティを構成し、アプリケーションの起動時に検索構成を反映できるようにしたいと考えています。理想的には、クエリを次のように表示する方法をいくつか作成したいと思います。
//Assume predicates is passed as a method argument.
// of List<Expression<Func<T,bool>>>
//Assume user is passed in as a method argument.
//Assume FilterToUserAccess is a custom extension method that restricts the dataset
// to access restrictions.
var query = _dbContext.Set<EntityType>()
.FilterToUserAccess(user);
foreach(var p in predicates){
query = query.Or(p);
}
return p.ToList();
私はできることを理解しています:
_dbContext.Set<EntityType>().Where(predicate1 || predicate2 || predicate3)
ただし、これは、この問題を解決するために取りたいアプローチでは機能しません。理想的には、クライアント サイトの 1 つの管理者がアクセスして、シングル クリックで追加の検索用語を構成して、そのエンティティ タイプのすべてのクイック検索に含めることができます。.Where(...)
"and" チェーン ロジック。