前言:前幾天寫了一篇動態lamada的文章c#高階系列——動態lamada,受園友xiao99的啟發,今天打算來重新優化下這個動態lamada的工具類。在此做個筆記,以免以後忘了。
上篇裡面我們說了動態lamada的使用必要性以及使用場景,但是感覺用在專案裡面還不太方便,最難用的就是需要傳遞屬性名稱的字串,感覺這有點太lower了。然後就是那個列舉的使用著實感覺沒啥必要,我們只需要將contains、equal、lessthan、greaterthan等方法分別封裝乙個獨立的方法即可。好了,多說容易讓人頭暈,直接上**吧。
publicclass lamadaextentionwhere dto:new
()
//唯讀屬性,返回生成的lamada
public expressionbool>>lamada
}//////
字串contains篩選
/// ///
///public
void contains(expressionstring>> expproperty, object
strvalue)
//////
等於
/// ///
///public
void equal(expressionobject>> expproperty, object
strvalue)
//////
小於
/// ///
///public
void lessthan(expressionobject>> expproperty, object
strvalue)
//////
小於等於
/// ///
///public
void lessthanorequal(expressionobject>> expproperty, object
strvalue)
//////
大於
/// ///
///public
void greaterthan(expressionobject>> expproperty, object
strvalue)
//////
大於等於
/// ///
///public
void greaterthanorequal(expressionobject>> expproperty, object
strvalue)
private expressionbool>>getlambda()
if (whereexpr == null
)
return
null
;
return expression.lambda>(whereexpr, m_parameter);
}//得到memberexpression
private memberexpression getmemberexpression(expressionobject>>exp)
}
可以看出,對於常用的操作我們封裝了contains、equal、lessthan、lessthanorequal、greaterthan、greaterthanorequal六個方法,除了contains方法的引數直接使用了expression>型別以為,其他都用的expression>。因為contains方法只可能是string型別的變數操作,而其他操作可能涉及其他型別,就是為了傳這個object型別,有個問題博主除錯了很久,由於傳過來的是object,這個要得到屬性的真是型別貌似不那麼容易了,找了很久都沒找到。最後只能通過getmemberexpression這個方法來得到memberexpression。
還是來看看如何使用:
publicobject getusers(int limit, int offset, string username, string
fullname)
最大的方便就是我們想要篩選的字段可以通過lamada點出來了,再看看之前的那種用法
olamadaextention.getexpression("user_name
", username, expressiontype.contains);
有沒有瞬間高大上。user_name直接點出來,比敲字串要爽吧。感謝神奇的lamada,感謝全能的c#,感謝熱心的園友。
webpack系列二 webpack打包優化探索
雖然webpack的已經公升級到了webpack4,而我們目前還在使用webpack3,但其中的優化點都大同小異,公升級後同樣適用。這三條原則永遠是一切優化的前提 1 主要配置 2plugins 3 new webpack.optimize.moduleconcatenationplugin 4 1...
c 高階二(動態分配記憶體)
1,new方法 建立 new 釋放delete 刪除陣列為delete a 注意釋放後需要令指標為null,防止產生野指標 建立普通變數 int a newint 建立陣列變數 int a newint 10 刪除普通變數記憶體 delete a 刪除陣列變數 delete a 防止a變為野指標 a...
C語言高階程式設計系列
關於c語言高階程式設計系列文章。筆者主要從事linux kernel bsp driver以及tcp ip方向工作,日常主要使用c語言。工作數年,感嘆c語言的簡潔卻不簡單,至今仍不敢說精通c,希望可以通過此系列文章的總結系統地提公升自己。更新於 20191124 目錄 c語言高階程式設計 預處理中的...