我想让用户选择按不同的属性进行搜索。例如
[输入文本] | [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/