2011-03-26 60 views
5

所以,我想實現一個頁面來搜索數據庫中的記錄。該操作的URL應該是類似於「〜/ Mail/List/{PropertyName}/{PropertyValue}。使用MVC + Linq + EF的搜索頁面

屬性名稱和值是要過濾的對應實體屬性名稱,值是要匹配的屬性值。問題是,實體包含許多類型的屬性。詮釋,字符串,日期等..

的問題是,我該如何實現動態搜索頁面或類似的東西來過濾我的查詢?

謝謝!

回答

3

所有的LINQ操作符都希望傳入lambda表達式。所以當你想做像這樣的過濾時,你需要能夠構造相應的lambda表達式。通常,在編譯時知道值時,沒有問題,只需構造lambda。

如果您不知道編譯時的值,則必須手動構造expression tree(實質上是由lambda表達式構成的)。這可能有點複雜,但有庫可以幫助你,比如Dynamic LINQhere是EF的另一個很好的教程)。然後,您可以指定您的,其中條件作爲字符串,並且在運行時的庫會將其轉換爲表達式樹,或者在出錯時引發異常。

所以,在你的榜樣,使用動態LINQ,你可以做你的查詢關鍵詞,比如db.Mails.Where(PropertyName + " == @0", PropertyValue);

+0

哦。我的。神!夥計,謝謝!這是一個完美的答案。其實我很長時間以來一直在努力解決這個問題,最後有人給了我一個直接的答案! – 2011-03-26 13:15:54