2013-03-18 125 views
1

我想映射兩個字段之間的比較,以前我只做過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這兩個值放入返回的Lambda中,但它抱怨過多的重載。

感謝您的任何幫助。

回答