public override LambdaExpression GetBindExpression() { bool sourceIsQueryable = SourceValueType.IsGenericQueryable(); bool targetIsQueryable = TargetValueType.IsGenericQueryable(); var selectMethod = sourceIsQueryable ? MethodFinder.GetQuerybleSelect <TSourceValueItem, TTargetValueItem>() : MethodFinder.GetEnumerableSelect <TSourceValueItem, TTargetValueItem>(); var callSelectExpression = Expression.Call(selectMethod, this.SourceExpression.Body, GetAssignExpression()); var toResultExpression = GetResultExpression(callSelectExpression, sourceIsQueryable, targetIsQueryable); // 需要处理source为null的情况 var resultExpression = Expression.Condition( Expression.Equal(this.SourceExpression.Body, Expression.Constant(null)) , Expression.Constant(null, this.TargetValueType), toResultExpression); return(Expression.Lambda(resultExpression, this.SourceExpression.Parameters.First())); }