次のような醜いコードがたくさんあります。
if (!string.IsNullOrEmpty(ddlFileName.SelectedItem.Text))
results = results.Where(x => x.FileName.Contains(ddlFileName.SelectedValue));
if (chkFileName.Checked)
results = results.Where(x => x.FileName == null);
if (!string.IsNullOrEmpty(ddlIPAddress.SelectedItem.Text))
results = results.Where(x => x.IpAddress.Contains(ddlIPAddress.SelectedValue));
if (chkIPAddress.Checked)
results = results.Where(x => x.IpAddress == null);
...etc.
results
ですIQueryable<MyObject>
。
これらの無数のドロップダウンとチェックボックスのそれぞれについて、ドロップダウンで何かが選択されている場合、ユーザーはその項目を一致させたいという考えです。チェックボックスがチェックされている場合、ユーザーはそのフィールドが null または空の文字列であるレコードを特に必要としています。(UI では、両方を同時に選択することはできません。) これはすべて、すべての条件を追加した後、最後に実行される LINQ 式に追加されます。
繰り返し部分をメソッドに入れ、変更内容を渡すことができるように、1 つまたは 2 つの方法を引き出す必要があるようです。Expression<Func<MyObject, bool>>
私は他の場所でこれを行いましたが、このコードのセットは私を悩ませています。(また、可能であればタイプセーフを維持したいので、「動的LINQ」は避けたいと思います。)何かアイデアはありますか?