2011-06-15 40 views
4

我想使用通用存儲庫& memcached緩存EF4結果。這一切都很好,除了我需要一個lambda表達式的唯一鍵表示。如何從lambda表達式獲取唯一字符串

例如以通用庫的調用可能是:

Repository<User> userRepository = new Repository<User>(); 
string name = "Erik"; 
List<User> users_named_erik = userRepository.Find(x => x.Name == name).ToList(); 

在我的通用庫函數,我需要做的唯一密鑰出來的lambda表達式將其存儲在memcached中的。

所以我需要一個能做到這一點

string GetPredicate(Expression<Func<T,bool>> where) 
{ 

} 

函數的結果應該是這個字符串x=> x.Name == "Erik"的功能。而不是像我從ToString()方法得到的+<>c__DisplayClass0)

在此先感謝。

+1

這個問題有*相當*一些變化已經問。檢查與權利有關。基本答案基本上是,在訪問者的表達式樹上編寫自己的答案。 – Marc 2011-06-15 13:54:25

+0

我發佈這個問題的原因是沒有滿意的答案(包括問題4625846)。 – erikvda 2011-06-15 14:19:52

回答

1

看看this blog entry

基本上,您希望對錶達式進行「部分評估」以說明閉包引入的值。此MSDN Walkthrough(在「添加表達式計算器」標題下)具有博客條目引用的代碼,用於將未評估的閉包成員合併到結果字符串中。

現在,它可能無法處理複雜的表達式,但它看起來會讓你在路上。請記住,它不會標準化表達式。那就是x => x.Name == "Erik"在功能上等同於x => "Erik" == x.Name(以及所有其他變體)。

相關問題