csharp通用存储库:不能将Select()方法与IEnumerable一起使用(错误:需要显式强制转换)

时间:2018-07-02 13:38:49

标签: c# linq generics entity-framework-6 ienumerable

使用Csharp和mariaDb已经6个月了。仅使用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 :(得分:0)

首先,您忘记将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