2011-06-15 111 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(以及所有其他变体)。

相关问题