如何从lambda表达式中获取唯一字符串
本文关键字:获取 唯一 字符串 表达式 lambda | 更新日期: 2023-09-27 17:59:08
我想使用通用存储库缓存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"
。而不是像我从ToString()
方法中得到的+<>c__DisplayClass0)
。
提前谢谢。
看看这个博客条目。
基本上,您希望对表达式进行"部分求值",以说明闭包引入的值。此MSDN演练(标题为"添加表达式计算器")包含博客条目引用的代码,用于将未求值的闭包成员合并到结果字符串中。
现在,它可能不适用于复杂的表达式,但看起来它会让你走上正轨。请记住,它不会使表达式正常化。即x => x.Name == "Erik"
在功能上等同于x => "Erik" == x.Name
(以及所有其他变体)。