1

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 プロパティなどをチェックする方法です。

これが意味をなさない場合は、コメントしてください。問題を解決するよう努めます。

4

1 に答える 1