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

Leo*_*rdo 1 c# linq lambda entity-framework entity-framework-6

我需要将以下C#代码转换为有效的Entity Framework 6表达式:

(f => f.GetType().GetProperty(stringParamter).GetValue(f).ToString() == anotherStringParameter)
Run Code Online (Sandbox Code Playgroud)

这个人为"Order By"部分做了这件事,但我似乎无法弄清楚"哪里"部分......

一般来说,我想在这里实现的是一种动态查询形式,用户将"选择"属性在"dropbox"中过滤,提供过滤器值和命中查询...通常人们喜欢,f => f.TargetProp == userValue但我可以'当我不知道它是哪一个时,这样做...

Ser*_*rvy 6

您需要构造表示对属性的访问的表达式树:

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);
}
Run Code Online (Sandbox Code Playgroud)

这允许你写:

query = query.Where(PropertyEquals<EntityType>(stringParameter, anotherString));
Run Code Online (Sandbox Code Playgroud)