私はこれを今日何時間も作業してきましたが、これを行う簡単な方法があるように感じていますが、それは何となくbrute forceで動作させることはできません。ラムダクエリの複数の独立したフィルタ
私は5つのフィルタに基づいて、2つのオブジェクト間のマッピングとして機能するアプリケーション内のエンティティを持っています。目標は、フィルタと最も一致するレコードを見つけることです。
今、私は手作業でブルートゥースを使って最も特定の行を取得するために2^5のクエリを強制しますが、これを行うにははるかに簡単な方法が必要だと感じます。
ここで唯一の問題は、データベースに特定のフィルタ(またはすべて)の一致がないことがあり、その場合はNULLレコードを選択したいということです。
以下は私の恥ずかしそうなブルートフォースクエリの抜粋です。まず、5つのフィルタすべてを試してから、4つのマッチング、次に3つ、2つ、1つ、最後にすべてのNullの順列を試したいと思います。
incList.FirstOrDefault(x =>
x.Filter1 == filter1Parameter && x.Filter2 == filter2Parameter && x.Filter3 == filter3Parameter && x.Filter4 == filter4Parameter && x.Filter5 == filter5Parameter
|| x.Filter1 == null && x.Filter2 == filter2Parameter && x.Filter3 == filter3Parameter && x.Filter4 == filter4Parameter && x.Filter5 == filter5Parameter
|| x.Filter1 == filter1Parameter && x.Filter2 == null && x.Filter3 == filter3Parameter && x.Filter4 == filter4Parameter && x.Filter5 == filter5Parameter
|| x.Filter1 == filter1Parameter && x.Filter2 == filter2Parameter && x.Filter3 == null && x.Filter4 == filter4Parameter && x.Filter5 == filter5Parameter
|| x.Filter1 == filter1Parameter && x.Filter2 == filter2Parameter && x.Filter3 == filter3Parameter && x.Filter4 == null && x.Filter5 == filter5Parameter
|| x.Filter1 == filter1Parameter && x.Filter2 == filter2Parameter && x.Filter3 == filter3Parameter && x.Filter4 == filter4Parameter && x.Filter5 == null
私はもともと、私はそれが動作しませんでしたではない
incList.FirstOrDefault(x => (x.Filter1 == filter1Parameter || x.Filter1 == null) &&
(x.Filter2 == filter2Parameter || x.Filter2 == null) &&
(x.Filter3 == filter3Parameter || x.Filter3 == null) &&
(x.Filter4 == filter4Parameter || x.Filter4 == null) &&
(x.Filter5 == filter5Parameter || x.Filter5 == null));
しかし場合は独立して存在した場合に値を取得し、nullをつかむだろう簡単な文を持っていると考えていました。
何か指摘していただければ幸いです。
を項目を選択することができますが、「しかし、それは動作しませんでした」について詳しく説明することはできますか?また、この例では、5つではなく2つまたは3つのフィルタを使用するほうがずっと読みやすくなります。 –