||Memo|| Ответов: 1

C# -- не удается преобразовать из {0} в {1} ошибка


Привет, ребята. Я - новый ученик C#. У меня есть такая ошибка в моем коде :
Severity	Code	Description	Project	File	Line	Suppression State
Error	CS1503	Argument 2: cannot convert from 'System.Linq.Expressions.Expression<System.Func<TEntity, bool>>' to 'System.Linq.Expressions.Expression<System.Func<TContext, int, bool>>'

Я беру эту ошибку из-за предиката фильтра в команде where. Я не мог решить. Что я могу сделать ?
Код, который я написал:
public List<TEntity> GetList(Expression<Func<TEntity, bool>> filter = null)
        {
            using(var context = new TContext())
            {
                return filter == null ? context.Set<TContext>().ToList() : context.Set<TContext>().Where(filter).ToList();
            }
        }


Спасибо!!

Что я уже пробовал:

Я пытался писать вот так:
public List<TEntity> GetList(Expression<Func<TEntity,int, bool>> filter = null)
        {
            using(var context = new TContext())
            {
                return filter == null ? context.Set<TContext>().ToList() : context.Set<TContext>().Where(filter).ToList();
            }
        }


Но ошибка не изменилась.

1 Ответов

Рейтинг:
7

F-ES Sitecore

Я собираюсь предположить, что TContext-это Entity Framework DbContext, а TEntity-это сущность EF.

Метод "Set" возвращает набор данных из этой таблицы;

context.Set<TContext>().Where(filter).ToList();


Таким образом, вы получаете список элементов TContext из таблицы, содержащей элементы TContext. Затем вы делаете Where с помощью фильтра, но фильтр-это выражение, которое работает с элементами TEntity

Expression<Func<TEntity, bool>> filter


таким образом, Вы пытаетесь отфильтровать элементы TContext по свойствам на TEntity, и они не совпадают. Все это игнорирует слона в комнате, который вы используете "Set" в контексте БД, так что это все равно не работает. Я думаю, что вы хотели написать вот что;

public List<TEntity> GetList(Expression<Func<TEntity, bool>> filter = null)
        {
            using(var context = new TContext())
            {
                return filter == null ? context.Set<TEntity>().ToList() : context.Set<TEntity>().Where(filter).ToList();
            }
        }


Теперь код имеет смысл, поскольку вы запрашиваете набор сущностей из таблицы, а затем фильтруете этот список, используя выражение, относящееся к этой сущности. Теперь все ваши типы совпадают и имеют смысл.


||Memo||

Я думаю, что ты герой, спасибо!

BillWoodruff

+5