Exemple #1
0
        private void VisitEquals(BinaryExpression expression)
        {
            var constantExpression = expression.Right as ConstantExpression;

            if (constantExpression != null && true.Equals(constantExpression.Value))
            {
                VisitExpression(expression.Left);
                return;
            }

            if (constantExpression != null && false.Equals(constantExpression.Value))
            {
                luceneQuery.OpenSubclause();
                luceneQuery.Where("*:*");
                luceneQuery.NegateNext();
                VisitExpression(expression.Left);
                luceneQuery.CloseSubclause();
                return;
            }

            var methodCallExpression = expression.Left as MethodCallExpression;

            // checking for VB.NET string equality
            if (methodCallExpression != null && methodCallExpression.Method.Name == "CompareString" &&
                expression.Right.NodeType == ExpressionType.Constant &&
                Equals(((ConstantExpression)expression.Right).Value, 0))
            {
                var expressionMemberInfo = GetMember(methodCallExpression.Arguments[0]);

                luceneQuery.WhereEquals(
                    new WhereParams
                {
                    FieldName      = expressionMemberInfo.Path,
                    Value          = GetValueFromExpression(methodCallExpression.Arguments[1], GetMemberType(expressionMemberInfo)),
                    IsAnalyzed     = true,
                    AllowWildcards = false
                });
                return;
            }

            if (IsMemberAccessForQuerySource(expression.Left) == false && IsMemberAccessForQuerySource(expression.Right))
            {
                VisitEquals(Expression.Equal(expression.Right, expression.Left));
                return;
            }

            var memberInfo = GetMember(expression.Left);

            luceneQuery.WhereEquals(new WhereParams
            {
                FieldName      = memberInfo.Path,
                Value          = GetValueFromExpression(expression.Right, GetMemberType(memberInfo)),
                IsAnalyzed     = true,
                AllowWildcards = false,
                IsNestedPath   = memberInfo.IsNestedPath
            });
        }
Exemple #2
0
 /// <inheritdoc />
 public IFilterFactory <T> Equals(string fieldName, MethodCall value)
 {
     _documentQuery.WhereEquals(fieldName, value);
     return(this);
 }