c# - csharp 通用存储库:无法将 Select() 方法与 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<string>”隐式转换为“System.Collections.Generic.IEnumerable<Model.chantiers>”。存在显式转换(您是否缺少演员表?)
在我的应用程序中,我希望有一个通用方法来从我的 EF6 实体中检索列。谢谢您的帮助。
解决方案
首先你忘了把 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
推荐阅读
- java - 无法从图像数组列表加载 imageView
- python - 即使文件位于同一文件夹(文本文件)中,程序也无法找到文件
- javascript - 使用 Es5 和 Es6 的闭包
- github - 使用 github 操作自动化颤振工作流程
- javascript - 如何通过 vue js 中的 slug(也存在于 json 文件中)从我的 json 文件中获取文章内容?
- c# - 将动作转换为 LambdaExpression
- java - 以编程方式在表中添加新行
- php - iPhone safari 上的 PHP setcookie() 失败(有时)
- ios - 带电容器的 Ionic 4:xcodebuild 因手动签名过程而失败
- sql-server - 无限回滚 - SQL Server 2016