Универсальный репозиторий csharp: невозможно использовать метод Select () с IEnumerable (ошибка: требуется явное приведение) - PullRequest
0 голосов
/ 02 июля 2018

Уже 6 месяцев я использую Csharp и mariaDb. После работы только с POC я начал интересоваться общим репозиторием, EF6 и функциональным программированием. На самом деле я делаю некоторые изменения для своих приложений.

В моем общем хранилище у меня есть этот код:

public IEnumerable<TType> FindColumn<TType>(Expression<Func<TEntity, TType>> selection, Expression<Func<TEntity, bool>> predicate, Expression<Func<TEntity, TType>> OrderExpression)
        {
            return Context.Set<TEntity>().Where(predicate).OrderBy(OrderExpression).Select(selection).ToList();
        }

Я использую этот код в неуниверсальном хранилище следующим образом:

public IEnumerable<chantiers> GetAllChantiersAsc()
        {
            return FindColumn(d => d.NomChantier, d => d.NomClient.Equals(clients.NomClient), d=>d.NomChantier);
        }

У меня есть эта ошибка:

Невозможно неявно преобразовать тип 'System.Collections.Generic.IEnumerable ' в 'System.Collections.Generic.IEnumerable '. Существует явное преобразование (вам не хватает приведения?)

В моем приложении я хочу использовать универсальный метод для извлечения столбца из моей сущности EF6. Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 03 июля 2018

Прежде всего вы забыли добавить TEntity к идентификатору функции FindColumn:

public IEnumerable<TType> FindColumn<TEntity, TType>(...)

И, конечно, вы уже пытались выяснить, какой из ваших параметров неверен, полностью указав все типы:

public IEnumerable<Chantiers> GetAllChantiersAsc()
{
    Expression<Func<myEntityType, Chantiers>> selection = d => d.NomChantier;
    Expression<Func<myEntityType, bool>> predicate = d => d.NomClient.Equals(clients.NomClient);
    Expression<Func<myEntityType, Chantiers>> orderExpression = d=>d.NomChantier;
    IEnumerable<Chantiers> result = FindColumn<myEntityType, Chantiers>(
         selection,
         predicate,
         orderExpression);
     return result;
}

Я уверен, что ваш компилятор скажет вам, какой из ваших параметров имеет неправильный тип. Я предполагаю, что nomChantiers это ваша проблема, так как кажется, что это имя, а не Chantiers

...