Вы генерировали следующий код для каждого типа:
.QueryFilter = (p) => p.IsActive;
Теперь вы хотите
.QueryFilter = (p) => p.StatusCode == "ACTIVE";
Я считаю полезным написать выражение, которое я хочу, в C#, затем используйте отладчик, чтобы увидеть, как компилятор C# преобразовал это в граф выражений. Или просмотрите методы stati c в классе Expression и угадайте, что мне может понадобиться.
В вашем случае вам нужно, чтобы ваше лямбда-тело включало дополнительный тест на равенство и постоянное значение;
Expression.Equal(Expression.Property(...), Expression.Constant("ACTIVE"))
Но есть и другие способы использования компилятора C# для создания Expression
, которое вы хотите. Например:
public interface HasStatus {
StatusCode { get; set; }
}
public static void SetQueryFilter<T>(ModelBuilder builder) where T:HasStatus =>
builder.Entity<T>().HasQueryFilter(p => p.StatusCode == "ACTIVE");
typeof(...).GetMethod("SetQueryFilter")
.MakeGenericMethod(entityType.ClrType)
.Invoke(null, new object[]{ builder });