我會在前言說我是第8天進入生活的C#開發人員。Linq動態參數爲IQueryable.Where()
對於我正在處理的項目中的許多DomainModel,我需要能夠根據用戶在審閱/搜索表單中提交的內容來過濾表中的所有記錄。
目前2%的短線遊是:
表單提交到FooController的/審查。
評分然後抓住從PARAMS [「過濾器」]所有鍵/值對的一個字典並傳遞到一個輔助類呼叫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);
但是那顯然不會爲很多原因工作...仍然是我想要完成的想法就在那裏。我真的想簡化代碼,並通過使用某種動態幫助程序/實用程序來加速過濾過程。
我嘗試過的其他想法是使用反射和作品進行直接比較的孩子,但接下來如何檢查像CreatedDaDatime屬性的東西,我希望所有記錄都大於「r => CreatedDatetime> CreatedFrom」。
如果這一切都沒有意義,請評論,我會盡力澄清任何問題。
這就是我自己發現動態Linq庫時得出的結論。它非常酷,但我現在負擔不起。 – David 2009-06-03 21:25:48