優れた記事はここ、ここ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