Вопрос

Как я могу отфильтровать элементы сгенерированного кода кода из этого DbSet?

родовое слово

Метод

родовое слово

Модель

родовое слово

РЕДАКТИРОВАТЬ: забыл показать, что код сгенерированного кода является производным от кода сгенерированного кода

Это было полезно?

Решение

У вашего класса Wither нет свойства IsSoftDeleted, поэтому фильтровать нечего. Я предполагаю, что все, что унаследовано от BaseEntity.

Основная проблема в том, что IQueryable .Where на самом деле не существует: это метод расширения, а методы расширения плохо сочетаются с динамическими типами. Если компилятор видит, что тип реализует IQueryable , вы можете ввести var.Where (...), и компилятор разрешит его в System.Linq.Queryable.Where (var, ...). Поскольку в вашем примере тип является динамическим, компилятор не знает, что он реализует IQueryable, и сообщит об ошибке, когда вы попытаетесь вызвать Where.

Вы можете преобразовать DbSet в IQueryable (если Type имеет BaseEntity в качестве базового класса) и вызвать любой фильтр для этого. Вы действительно используете функцию динамического типа? Если нет, вы также можете отказаться от своей настраиваемой функции Set и использовать функцию DbContext.Set по умолчанию.

родовое слово

Примечание: это не то же самое, что и использование dbContext.Set (type) .Cast (): это не сработает, потому что DbSet и DbSet несовместимы. Это можно сделать только с IQueryable и другими интерфейсами с аргументами типа out.

Другие советы

Проблема в том, что Set(Type type) возвращает неуниверсальный код DbSet.Чтобы применить фильтр, вы должны преобразовать его в общий код-код-тега:

родовое слово

Это работает только в том случае, если IQueryable<T> является производным от type или самого BaseEntity, в противном случае вы получите исключение времени выполнения.

Результирующий код BaseEntity относится к типу set, поэтому возникает вопрос, насколько полезен этот результат и как можно применить дополнительные фильтры к производным объектам, таким как IQueryable<BaseEntity>.По крайней мере, я не мог получить компилируемый код, сделав Where(w => w.Name == "abc") типа set.Я также не хотел бы терять строгую типизацию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top