-
-
Notifications
You must be signed in to change notification settings - Fork 110
Open
Description
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
Metadata
Metadata
Assignees
Labels
No labels
