c# - 使用反射从属性名称中获取 lambda 表达式

标签 c# reflection entity-framework-4 lambda

我想让用户选择按不同的属性进行搜索。例如

[输入文本] | [SELECT OPTION {ID, NAME, PHONE}] | [搜索]

我稍后会像这样构建我的查询:

repository.Where(lambda-expression)

其中 lambda 表达式是根据所选选项 {ID, NAME, PHONE} 构建的 (例如:x => x.NAME.Equals(INPUT TEXT))

是否可以使用反射从属性名称构建 lambda?

谢谢

最佳答案

您构建的不是 lambda 表达式,而是表达式树。这并不难,但需要一点耐心。在您的示例中,您可能需要:

ParameterExpression parameter = Expression.Parameter(typeof(Foo), "x");
Expression property = Expression.Property(parameter, propertyName);
Expression target = Expression.Constant(inputText);
Expression equalsMethod = Expression.Call(property, "Equals", null, target);
Expression<Func<Foo, bool>> lambda =
   Expression.Lambda<Func<Foo, bool>>(equalsMethod, parameter); 

这是假设:

  • 存储库元素类型是 Foo
  • 您想使用名为 propertyName 的属性
  • 您想比较 inputText
  • 是否相等

关于c# - 使用反射从属性名称中获取 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7246715/

相关文章:

c# - 获取提供给泛型方法的泛型参数类型和值

entity-framework - EntityFramework : Calling ToList() on IQueryable with ~11. 000 条记录需要 10 秒

c# - Blazor 服务器 : Mixing EF Core DbContextFactory with DbContext

c# - LINQ 查询 - 多个基于 int 数组的子查询

c# - 快速字符串查找的最佳集合

Scala-如何获取 Vector 的包含类?

java - 为什么存在这样的方法时会抛出 `NoSuchMethodException`?

entity-framework-4 - EF4 : Difference between POCO , self 跟踪实体,POCO 代理

c# - Entity Framework - 打印 EntityValidationErrors 以记录

c# - 对 WCF 服务的多个并行调用比单个调用花费的时间更长