public override DbExpression Visit(DbIsNullExpression expression)
        {
            DebugCheck.NotNull(expression);

            var propertyExpression
                = expression.Argument as DbPropertyExpression;

            if (propertyExpression != null)
            {
                var parameter
                    = GetParameter((EdmProperty)propertyExpression.Property, originalValue: true);

                if (parameter != null)
                {
                    if (parameter.Item2)
                    {
                        // Current value, remove condition
                        return(null);
                    }

                    var parameterReferenceExpression
                        = new DbParameterReferenceExpression(parameter.Item1.TypeUsage, parameter.Item1.Name);

                    var equalityPredicate
                        = propertyExpression.Equal(parameterReferenceExpression);

                    var nullPredicate
                        = propertyExpression.IsNull().And(parameterReferenceExpression.IsNull());

                    return(equalityPredicate.Or(nullPredicate));
                }
            }

            return(base.Visit(expression));
        }
コード例 #2
0
        public override DbExpression Visit(DbIsNullExpression expression)
        {
            DbPropertyExpression left = expression.Argument as DbPropertyExpression;

            if (left != null)
            {
                Tuple <FunctionParameter, bool> parameter = this.GetParameter((EdmProperty)left.Property, true);
                if (parameter != null)
                {
                    if (parameter.Item2)
                    {
                        return((DbExpression)null);
                    }
                    DbParameterReferenceExpression referenceExpression = new DbParameterReferenceExpression(parameter.Item1.TypeUsage, parameter.Item1.Name);
                    return((DbExpression)left.Equal((DbExpression)referenceExpression).Or((DbExpression)left.IsNull().And((DbExpression)referenceExpression.IsNull())));
                }
            }
            return(base.Visit(expression));
        }