Я пытаюсь сопоставить сравнения между двумя полями, где раньше я делал только поле для сравнения Expression.Constant
.BuildPredicate, сравнивая два поля
private static Expression<Func<TDomainModel, bool>> BuildPredicate<TDomainModel>(string leftPropName, string rightPropName, TypeMap map)
{
PropertyMap leftPropMap = map.GetPropertyMaps().FirstOrDefault(pro => pro.DestinationProperty.Name == leftPropName);
Expression leftParam = leftPropMap.CustomExpression.Body;
PropertyMap rightPropMap = map.GetPropertyMaps().FirstOrDefault(pro => pro.DestinationProperty.Name == rightPropName);
Expression rightParam = rightPropMap.CustomExpression.Body;
Expression operatorBody = Expression.GreaterThanOrEqual(leftParam, rightParam);
return Expression.Lambda<Func<TDomainModel, bool>>(operatorBody, leftPropMap.CustomExpression.Parameters[0]);
}
Однако я всегда получаю исключение ...
The parameter 's' was not bound in the specified LINQ to Entities query expression.
Оба свойства находятся на одной и той же сущности, и даже использовать 'S' в их отображений. Не знаю, как это исправить. Я попытался поместить оба значения CustomExpression.Parameters
в возвращаемый Лямбда, но он жалуется на слишком много перегрузок.
Спасибо за любую помощь.