이 속성은 컴파일 시간에 무엇인지 경우에만 람다 표현식을 작성할 수 있습니다. 분야가 무엇인지를 분명히 알지 못하기 때문에 직접 수식을 만들어야합니다.
public Expression<Func<T, bool>> GenerateFieldNotNullExpression<T>(string fieldName)
{
var parameter = Expression.Parameter(typeof(T), "m");
// m
var fieldAccess = Expression.PropertyOrField(parameter, fieldName);
// m.[fieldName]
var nullValue = Expression.Constant(null);
// null
var body = Expression.NotEqual(fieldAccess, nullValue);
// m.[fieldName] != null
var expr = Expression.Lambda<Func<T, bool>>(body, parameter);
// m => m.[fieldName] != null
return expr;
}
이 그런 다음 식을 만들려면이를 사용하여 그들을 연결 :
var predicate = PredicateBuilder.True<MyType>();
foreach (var fieldName in fieldNames)
{
var expr = GenerateFieldNotNullExpression<MyType>(fieldName);
predicate = predicate.And(expr);
}
당신은 표현을 생성하기 위해이 같은 도우미 함수가 필요합니다