alirezanet/Gridify

Conditional operator and Select in GridifyMapper

andvant opened this issue · 2 comments

Version

2.7.4

Details

Hi,
I'm having a problem with a GridifyMapper that has a conditional operator and Select method
Given this class structure:

public class Root
{
    public int Id { get; set; }

    public int? Blog1Id { get; set; }
    public Blog Blog1 { get; set; }

    public int? Blog2Id { get; set; }
    public Blog Blog2 { get; set; }
}

public class Blog
{
    public int Id { get; set; }
    public ICollection<Post> Posts { get; set; }
}

public class Post
{
    public int Id { get; set; }
    public string Text { get; set; }
}

and this mapper:

var mapper = new GridifyMapper<Root>()
    .AddMap("PostText", r => r.Blog1Id != null
        ? r.Blog1.Posts.Select(p => p.Text)
        : r.Blog2.Posts.Select(p => p.Text));

when applying filtering:

var result = _context.Root.ApplyFiltering("PostText = Hello", mapper).ToList();

this exception is thrown:

Gridify.GridifyFilteringException: The 'Select' method on 'PostText' not found
at Gridify.Syntax.ExpressionToQueryConvertor.GenerateNestedExpression[T](IGridifyMapper`1 mapper, IGMap`1 gMap, ValueExpressionSyntax value, SyntaxNode op)
at Gridify.Syntax.ExpressionToQueryConvertor.ConvertBinaryExpressionSyntaxToQuery[T](BinaryExpressionSyntax binarySyntax, IGridifyMapper`1 mapper)
at Gridify.Syntax.ExpressionToQueryConvertor.GenerateQuery[T](ExpressionSyntax expression, IGridifyMapper`1 mapper, Boolean isParenthesisOpen)
at Gridify.GridifyExtensions.ApplyFiltering[T](IQueryable`1 query, String filter, IGridifyMapper`1 mapper)

Steps to reproduce

have a conditional operator ?: and .Select() in a GridifyMapper

fixed in v2.8.0

Awesome, thanks!