我需要将以下 C# 代码转换为有效的 Entity Framework 6 表达式:
(f => f.GetType().GetProperty(stringParamter).GetValue(f).ToString() == anotherStringParameter)
This guy为“Order By”部分做了它,但我似乎无法弄清楚“where”部分......
一般来说,我在这里试图实现的是一种动态查询形式,用户将“选择”属性以在“保管箱”中进行过滤,提供过滤值并点击查询……通常人们喜欢 f => f.TargetProp == userValue
但是当我不知道它是哪一个时我不能这样做......
最佳答案
您需要构建表示访问属性的表达式树:
public static Expression<Func<T, bool>> PropertyEquals<T>(
string propertyName, string valueToCompare)
{
var param = Expression.Parameter(typeof(T));
var body = Expression.Equal(Expression.Property(param, propertyName)
, Expression.Constant(valueToCompare));
return Expression.Lambda<Func<T, bool>>(body, param);
}
这允许你写:
query = query.Where(PropertyEquals<EntityType>(stringParameter, anotherString));
关于c# - 如何动态创建以下 LINQ 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22916231/