コード例 #1
0
    public override Expression HandleOperation(
        QueryableFilterContext context,
        IFilterOperationField field,
        IValueNode value,
        object?parsedValue)
    {
        if (context.RuntimeTypes.Count > 0 &&
            context.RuntimeTypes.Peek().TypeArguments is { Count : > 0 } args&&
            parsedValue is bool parsedBool)
        {
            Expression?property = context.GetInstance();

            Expression expression;
            if (parsedBool)
            {
                expression = FilterExpressionBuilder.Any(args[0].Source, property);
            }
            else
            {
                expression = FilterExpressionBuilder.Not(
                    FilterExpressionBuilder.Any(args[0].Source, property));
            }

            if (context.InMemory)
            {
                expression = FilterExpressionBuilder.NotNullAndAlso(property, expression);
            }

            return(expression);
        }

        throw ThrowHelper.Filtering_CouldNotParseValue(this, value, field.Type, field);
    }
コード例 #2
0
 protected override Expression HandleListOperation(
     QueryableFilterContext context,
     IFilterField field,
     ObjectFieldNode node,
     Type closureType,
     LambdaExpression lambda) =>
 FilterExpressionBuilder.Any(closureType, context.GetInstance(), lambda);