Skip to content

Error converting type: Bug or implementation issue - please help #158

@jacodv

Description

@jacodv

Describe the bug
We have a generic report generator, it receives IQueryable<T> and OData query string. I need to change it to accept IQueryable<T> and Expression.

The report engine must execute
var results = records.Provider.CreateQuery<T>(expression);

Below is a simple test

To Reproduce

  • Dotnet 6
[Test]
    public void CreateQuery_GivenExpression_ShouldGenerateReport()
    {
      // arrange
      Setup();
      var emptyList = new List<OutputChannelLog>().AsQueryable();
      var query = emptyList.Where(x => x.Channel == OutputChannelCodes.Email);
      var expression = query.Expression;
      var settings = new FactorySettings(){UseRelaxedTypeNames = true};
      var expressionSerializer = new ExpressionSerializer(new JsonSerializer(), settings);
      var expressionText = expressionSerializer.SerializeText(expression);

      Console.WriteLine(@$"Expression: {expression}");
      Console.WriteLine(@$"ExpressionText: {expressionText}");

      var user = Builder<User>.CreateNew().WithValidData().Build();

      var dbItems = Builder<OutputChannelLog>
        .CreateListOfSize(4)
        .TheFirst(2)
        .With(x => x.Channel = OutputChannelCodes.Sms)
        .TheNext(2)
        .With(x => x.Channel = OutputChannelCodes.Email)
        .Build();
      var dbQuery = dbItems.AsQueryable();


      // action
      var reportItems = dbQuery.Provider.CreateQuery<OutputChannelLog>(expressionSerializer.DeserializeText(expressionText));

      // assert
      reportItems.Count().Should().Be(2);
    }

Expected behavior
Filter the records from 4 to 2

Screenshots
image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions