2008-09-10 13 views
2

このLINQコードをどのようにリファクタリングしますか?

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. 

resultsIQueryable<MyObject>です。
考えられるのは、これらの無数のドロップダウンとチェックボックスのそれぞれについて、もしドロップダウンに何かが選択されていれば、そのアイテムと一致させたいということです。チェックボックスをオンにすると、ユーザは、そのフィールドがnullまたは空の文字列であるレコードを特に必要とします。 (UIは同時に両方を選択することはできません)。これはすべて、すべての条件を追加した後、最後に実行されるLINQ式に追加されます。

Expression<Func<MyObject, bool>>のように見えるので、Expression<Func<MyObject, bool>>を2つ引き出す方法があります。そのため、繰り返し部分をメソッドに入れて、変更するだけで渡すことができます。私はこれを他の場所でやったことがありますが、このコードセットは私に邪魔されています。 (また、私は可能な場合、型安全なものを保持したいので、私は "動的LINQ"を避けたいです。)任意のアイデア?

答えて

関連する問題