以前はフィールド間の比較のみを行っていましたが、2 つのフィールド間の比較をマップしようとしていますExpression.Constant
。
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」を使用しています。これを修正する方法がわかりません。返された Lambdaに両方の値を入れようとしましCustomExpression.Parameters
たが、オーバーロードが多すぎると不平を言っています。
助けてくれてありがとう。