這是我做的:
public static Expression<Func<TModel, TProperty>> GenerateModelExpression<TModel, TProperty>(PropertyInfo property)
{
ParameterExpression fieldName = Expression.Parameter(typeof(TModel), "m");
var propertyExpr = Expression.Property(itemExpr, property.Name);
return Expression.Lambda<Func<TModel, TProperty>>(propertyExpr, fieldName);
}
的屬性參數將是你的情況,你可以得到使用反射「製作」。
https://github.com/AmmarCSE/razor-grid
編輯
更精確地審查這個問題,並通過@Servy,How do i create the following LINQ expression dynamically?引用前answery後,這裏是一個解決方案:
public static Expression<Func<TModel, TProperty>> GenerateModelExpression<TModel, TProperty>(string filter, string select)
{
ParameterExpression param = Expression.Parameter(typeof(TModel), "m");
var body = Expression.Equal(Expression.Property(param, typeof(TModel).GetProperty(filter))
, Expression.Constant(select));
return Expression.Lambda<Func<TModel, TProperty>>(body, param);
}
你有沒有考慮的使用[動態LINQ(http://dynamiclinq.codeplex.com/)? –
[我如何動態創建以下LINQ表達式?](http://stackoverflow.com/questions/22916231/how-do-i-create-the-following-linq-expression-dynamically) – Servy
@Servy謝謝你的鏈接。這個解決方案非常有效。對不起,重複! Upvoted在這裏和原始線程。 –