これが完全に可能かどうかはわかりません。式ビルダーと述語ビルダーに関するいくつかの情報を見つけましたが、これまでのところ、事前に知らなくても任意のクエリを実行できるものはありません。
基本的に、大規模な SQL データベースからのオブジェクトのコレクションがあり、ユーザーがこれらのオブジェクトを表示およびフィルターできるようにする Web ページ (ASP.NET MVC 4) を構築しています。ユーザーが入力するクエリの複雑さはさまざまです。これらのクエリを入力させる最も簡単で適切な方法は、Visual Studio TFS プラグインで作業項目を検索できるようにする方法のようなものです。行を追加し続けることができる条件のテーブルです。結合条件として「and」または「or」を選択し、フィールドを選択して値を入力し、それに一致するか一致しないかを選択します。
1. show items where [Field] [is|is not] [value]
2. [and|or] [Field] [is|is not] [value]
3. [and|or] [Field] [is|is not] [value]
etc...
.ToList()
それを最後に貼り付けられるLINQ風に変える最も簡単な方法は何ですか? 私がこれまでに思いついた唯一の解決策は、さまざまなフィールドに一致.Where()
して .このようなもの:
- 条件が AND の間:
- フィールドに合わせて大きなスイッチを使用する
query = query.Where(ThisField == value);
- OR の条件に該当する場合:
- 現在の結果を一時リストに追加
- フィルタリングされていない完全なリストからの新しいクエリ
- フィールドに合わせて大きなスイッチを使用する
query = fullList.Where(ThisField == value);
- 今まで通り続ける
- 条件がなくなったら、現在の結果セットをずっと使用してきた一時リストに追加し、そのリストを返します。
これは私が望むよりもエレガントではないようです。