【发布时间】:2013-03-18 16:38:53
【问题描述】:
我正在尝试映射两个字段之间的比较,以前我只对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”。不知道如何解决这个问题。我尝试将两个 CustomExpression.Parameters 值都放入返回的 Lambda 中,但它抱怨过多的重载。
感谢您的帮助。
【问题讨论】:
标签: c# lambda linq-to-entities expression automapper