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

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

我想使用通用存储库和 memcached 缓存 EF4 结果。这一切都很好,除了我需要 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() 得到的方法。

提前致谢。

最佳答案

看看this blog entry .

基本上,您希望对表达式进行“部分求值”,以说明闭包引入的值。这MSDN Walkthrough (在“添加表达式计算器”标题下)包含博客条目引用的代码,用于将未计算的闭包成员合并到结果字符串中。

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

关于c# - 如何从 lambda 表达式中获取唯一字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6358765/

相关文章:

c# - 如何在 MVC 上下文之外使用依赖注入(inject)?

c# - 是否可以在不编译的情况下调用 C# 词法/语法分析器?

c# - EF Transactions C# MySQL 连接器

entity-framework-4 - Entity Framework Power Tools CTP1 可以为存储过程生成类吗?

c# - 如何为 dbContext 的每个实例禁用延迟加载?

c# - 有没有更简单/更好的方法来做到这一点,因为 C# 中不允许向下转型?”

c# - 在 post 请求 asp.net mvc 中更改模型属性

c# - 使用 LINQ 获取第一个排序元素? (C#)

c# - EF Core 的 DefaultIfEmpty 异常 "bug or limitation"

c# - Find() 与 FirstOrDefault() 的性能对比