一个很好的文章,这里https://www.codeproject.com/Articles/1079028/Build-Lambda-Expressions-Dynamically
这里是我的解决方案:
public static Expression<Func<TClass, bool>> ConvertParamArgsToExpression<TClass>(string[] args)
{
Expression finalExpression = Expression.Constant(true);
var parameter = Expression.Parameter(typeof(TClass), "x");
foreach (string arg in args) {
string[] values = arg.Split('=');
PropertyInfo prop = typeof(TClass).GetProperty(values[0]);
if(prop != null)
{
Expression expression = null;
var member = Expression.Property(parameter, prop.Name);
var constant = Expression.Constant(values[1]);
expression = Expression.Equal(member, constant);
finalExpression = Expression.AndAlso(finalExpression, expression);
}
}
return (Expression.Lambda<Func<TClass, bool>>(finalExpression, parameter));
}
用法:
Expression<Func<AdminPageObject, bool>> expression = LambdaConverter.ConvertParamArgsToExpression<AdminPageObject>(args);
if(expression != null)
{
items = items.Where(expression);
}
哪里是什么?一个'thing'包含任何提供的字符串?您必须添加更多信息 – Jonesopolis
什么样的EntityFramework表达式?你试过什么了?请至少提供[mcve]。 – MiGro
这应该是一件相当简单的事情。它处理Expression.Parameter和Expression.Property等我只是寻找这个的实现。 – chrisdyck