我正在使用多种方法构建 IQueryable 查询。这些方法有些复杂,但我想解决的问题可以提取和简化如下。我有两种方法
private Expression<Func<T, bool>> CreateExpressionA(string ValueA)
{
return a => a.PropertyA.ToLower() == ValueA;
}
private Expression<Func<T, bool>> CreateExpressionB(string ValueB)
{
return a => a.PropertyB.ToLower() == ValueB;
}
我宁愿拥有的是:
private Expression<Func<T, bool>> CreateExpression(??? Selector, string Value)
{
return a => a.Selector.ToLower() == Value;
}
或类似的方法,可以让我避免使用两个相同的方法,唯一的区别在于在那里使用了对象的什么属性。
有没有可能以某种优雅的方式做到这一点?
最佳答案
您可以传入一个选择器 Func
,它返回一个 string
属性:
private Expression<Func<T, bool>> CreateExpression<T>(Func<T, string> selector, string value)
{
return a => selector(a).ToLower() == value;
}
用法:
CreateExpression<MyType>(x => x.PropertyA, "thevalue");
关于c# - 在 C# 中制作泛型表达式生成方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40590451/