// See https://aka.ms/new-console-template for more information using System.Runtime.InteropServices; using AutoMapper; using AutoMapper.QueryableExtensions; using Baguette.Querying; using Microsoft.Extensions.DependencyInjection; using Test; var services = new ServiceCollection(); services.AddQueryProfiles(typeof(Model)); services.AddAutoMapper(typeof(Model)); var provider = services.BuildServiceProvider(); var processor = provider.GetRequiredService(); var mapper = provider.GetRequiredService(); var list = new[] { new Model { FirstName = "Jens", LastName = "De Craecker", BirthDate = new DateOnly(1998, 6, 30), Nested = new NestedModel { FirstName = "Jens", LastName = "De Craecker", BirthDate = new DateOnly(1998, 6, 30), NestedInNested = new NestedNestedModel { Text = "Hello World!" } }, Nested2 = new NestedModel { FirstName = "Jens", LastName = "De Craecker", BirthDate = new DateOnly(1998, 6, 30), NestedInNested = new NestedNestedModel { Text = "Hello World!" } } } }; var filters = new ModelFilters() { // FirstName = "Jens", // Sorting = new[] // { // new SortingOptions() // { // SortBy = "LastName" // } // } Search = "Jens" }; var query = list.AsQueryable().ApplyFilters(processor, filters).ProjectTo(mapper.ConfigurationProvider); var result = query.ToList(); // // var json = JsonSerializer.Serialize(filters, typeof(ModelFilters)); // // var filters2 = JsonSerializer.Deserialize(json); // // var result = list.AsQueryable().ApplyFilters(processor, filters).ToList(); // // var pipelineProvider = provider.GetRequiredService(); // // var result2 = list.AsQueryable().Where(pipelineProvider.GetPredicate(filters)).ToList(); return; class MappingProfile : Profile { public MappingProfile() { CreateMap(); } } public record ResponseModel(string FirstName, string LastName); [GenerateFilters(IncludeSorting = true, IncludePaging = true)] public record Model { [FilterMode(FilterMode.Contains)] [Searchable] public required string FirstName { get; init; } [SortAlias("Surname")] [SortAlias("")] [Searchable] public required string LastName { get; init; } public required DateOnly BirthDate { get; init; } [FilterMode(FilterMode.InList)] public TestEnum TestEnum { get; init; } [SortAlias("NestedAlias")] [SortAlias("")] [Searchable] public required NestedModel Nested { get; init; } public required NestedModel Nested2 { get; init; } } [StructLayout(LayoutKind.Auto)] public readonly partial record struct ModelFilters { } namespace Test { public enum TestEnum { Hello } [GenerateNestedFilters] public record NestedModel { [FilterMode(FilterMode.Contains)] [FilterName("HelloWorld")] public required string FirstName { get; init; } [Searchable] public required string LastName { get; init; } public required DateOnly BirthDate { get; init; } [FilterMode(FilterMode.InList)] public TestEnum TestEnum { get; init; } [SortAlias("NestedNestedAlias")] public required NestedNestedModel NestedInNested { get; init; } } [GenerateNestedFilters] public record NestedNestedModel { [SortAlias("TextAlias")] public required string Text { get; init; } } }