c# - 如何动态创建以下 LINQ 表达式?

标签 c# linq entity-framework lambda entity-framework-6

我需要将以下 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/

相关文章:

.net - 给出一个数字以返回 Enum 的近似值?

C# Linq Filter IEnumerable 动态属性和值

c# - 如何获取列条目之一相同的行数

c# - 在带有按钮和文本框的表单中运行几个错误

c# - 从后面的代码中清除 &lt;input&gt; 字段

c# - 如何以编程方式从 App.xaml 访问资源字符串?

c# - Linq - 在 Lambda 表达式中使用数组来获取多条记录

c# - SocketAsyncEventArgs - 如何检测正在进行的套接字操作并终止?

c# - 使用导入函数时不必要加入 Entity Framework ?

sql - : Store update, 插入或删除语句影响意外行数的解决方案 (0)