C# 開発者としての生活を始めて 8 日目です。
私が取り組んでいるプロジェクトの多くの DomainModels について、ユーザーがレビュー/検索フォームで送信した内容を考慮して、テーブル内のすべてのレコードをフィルター処理する機能が必要です。
現在、2 セントのショート ツアーは次のとおりです。
フォームは FooController/review に送信されます。
次に Review は、すべてのキーと値のペアを Params['filter'] からディクショナリに取得し、それを次のように非常によく似た FooFinder.ByProperties 呼び出しのヘルパー クラスに渡します。
public IQueryable<WorkPlan> ByProperties( IDictionary<string, string> properties)
{
var result = ForSite(Convert.ToInt64(properties.DefaultVal("SiteId", "0")));
v);
if(properties.ContainsKeyAndIsNotNullOrEmpty("WorkPlan.Key"))
{
var tempVal = Convert.ToInt64(properties["WorkPlan.Key"]);
result = result.Where(r => r.Id == tempVal);
}
// Multiple of these conditional checks follows
return result;
}
繰り返しのコードをできるだけ減らしたいと思い、次のようなことを試しました
result = ByProperty(properties, "WorkPlan.key", typeof (Int64), r, v => r.id == v);
しかし、それは多くの理由でうまくいかないことは明らかです...それでも、私が達成しようとしていることのアイデアはそこにあります. ある種の動的ヘルパー/ユーティリティを使用して、コードを簡素化し、フィルタリングのプロセスをスピードアップしたいと考えています。
私が試した他のアイデアは、リフレクションとその子供を使用して直接比較することでしたが、すべてのレコードが "r => CreatedDatetime > CreatedFrom" より大きい CreatedDatime プロパティなどをチェックする方法です。
これが意味をなさない場合は、コメントしてください。問題を解決するよう努めます。