如何从lambda表达式中获取唯一字符串

时间:2011-06-15 13:50:40

标签: c# linq entity-framework-4 lambda memcached

我想使用通用存储库& amp;来缓存EF4结果。 memcached的。这一切都很有效,除了我需要一个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"。而不是我从+<>c__DisplayClass0)方法得到的ToString()

提前致谢。

1 个答案:

答案 0 :(得分:1)

看看this blog entry

基本上,您希望对表达式进行“部分评估”以考虑闭包引入的值。此MSDN Walkthrough(在“添加表达式求值程序”标题下)具有博客条目引用的代码,用于将未评估的闭包成员合并到结果字符串中。

现在,它可能不适用于复杂的表达式,但看起来它会让你在路上。请记住,它没有规范化表达式。这是x => x.Name == "Erik"在功能上等同于x => "Erik" == x.Name(以及所有其他变体)。