using System.Collections;
using System.Collections.Generic;
public static void Main()
List<SomeEntity> entities = [
new SomeEntity("1111", "1111", "1111"),
new SomeEntity("2222", "2222", "2222"),
new SomeEntity("3333", "3333", "3333"),
new SomeEntity("4444", "4444", "4444"),
new SomeEntity("1111", "2222", "3333"),
new SomeEntity("1111", "2222", "2222"),
new SomeEntity("22122", "2222", "11211"),
var someFilter = new SomeFilter("1", null, "2");
var filtered = Filter(entities.AsQueryable(), someFilter);
Console.WriteLine(JsonSerializer.Serialize(filtered, new JsonSerializerOptions { WriteIndented = true }));
var filtered2 = Filter2(entities.AsQueryable(), someFilter);
Console.WriteLine(JsonSerializer.Serialize(filtered, new JsonSerializerOptions { WriteIndented = true }));
public static IQueryable<SomeEntity> Filter(IQueryable<SomeEntity> entities, SomeFilter filter)
if (filter.Property1 is not null)
entities = entities.Where(o => o.Property1.Contains(filter.Property1));
if (filter.Property2 is not null)
entities = entities.Where(o => o.Property2.Contains(filter.Property2));
if (filter.Property3 is not null)
entities = entities.Where(o => o.Property3.Contains(filter.Property3));
public static IQueryable<SomeEntity> Filter2(IQueryable<SomeEntity> entities, SomeFilter filter)
case true when filter.Property1 is not null:
entities = entities.Where(o => o.Property1.Contains(filter.Property1));
case true when filter.Property2 is not null:
entities = entities.Where(o => o.Property2.Contains(filter.Property2));
case true when filter.Property3 is not null:
entities = entities.Where(o => o.Property3.Contains(filter.Property3));
public record SomeFilter(string Property1, string Property2, string Property3);
public record SomeEntity(string Property1, string Property2, string Property3);