Я задал вопрос о том, как динамически компилировать запрос LINQ со всеми свойствами объекта, и houlgap был достаточно любезен, чтобы дать мне следующий код
private static Func<MyEntity, bool> GenerateLambda(MyEntity _myEntity, PropertyInfo propertyInfo)
{
var instance = Expression.Parameter(propertyInfo.DeclaringType, "i");
var property = Expression.Property(instance, propertyInfo);
var propertyValue = Expression.Constant(propertyInfo.GetValue(_myEntity, null));
var equalityCheck = Expression.Equal(property, propertyValue);
return Expression.Lambda<Func<MyEntity, bool>>(equalityCheck, instance).Compile();
}
Это прекрасно работает, если свойствоБыть запрошенным - это непосредственно член объекта, но для меня между ними есть промежуточное свойство.Например, Func Delegate для другого типа, например Func <ABCMyEntity,bool>
, в то время как MyEntity является членом этого объекта (ABCMyEntity.MyEntity).Переданный объект Propertyinfo является членом MyEntity.
Я знаю, это звучит ужасно странно, но я не могу лучше объяснить это.(Может потому что я не носитель языка).Пожалуйста, спросите меня, если что-то не ясно в вопросе.
Продолжение с Построение динамических запросов LINQ со всеми свойствами объекта