天天看點

C#進階系列——動态Lamada(二:優化)

前言:前幾天寫了一篇動态Lamada的文章C#進階系列——動态Lamada,受園友xiao99的啟發,今天打算來重新優化下這個動态Lamada的工具類。在此做個筆記,以免以後忘了。

上篇裡面我們說了動态Lamada的使用必要性以及使用場景,但是感覺用在項目裡面還不太友善,最難用的就是需要傳遞屬性名稱的字元串,感覺這有點太lower了。然後就是那個枚舉的使用着實感覺沒啥必要,我們隻需要将Contains、Equal、LessThan、GreaterThan等方法分别封裝一個獨立的方法即可。好了,多說容易讓人頭暈,直接上代碼吧。

可以看出,對于常用的操作我們封裝了Contains、Equal、LessThan、LessThanOrEqual、GreaterThan、GreaterThanOrEqual六個方法,除了Contains方法的參數直接使用了Expression<Func<DTO, string>>類型以為,其他都用的Expression<Func<DTO, object>>。因為Contains方法隻可能是string類型的變量操作,而其他操作可能涉及其他類型,就是為了傳這個object類型,有個問題部落客調試了很久,由于傳過來的是object,這個要得到屬性的真是類型貌似不那麼容易了,找了很久都沒找到。最後隻能通過GetMemberExpression這個方法來得到MemberExpression。

還是來看看如何使用:

最大的友善就是我們想要篩選的字段可以通過lamada點出來了,再看看之前的那種用法

有沒有瞬間高大上。USER_NAME直接點出來,比敲字元串要爽吧。感謝神奇的Lamada,感謝全能的C#,感謝熱心的園友。