敢说敢作敢为, 无怨无恨无悔。这篇文章主要讲述如何解决 - 无法使用Automapper将Generic.List强制转换为Linq.IQueryable?相关的知识,希望能为你提供帮助。
我在使用DTO和EF模型时遇到以下错误:
无法转换类型为'System.Collections.Generic.ListBootstrapped:1[Project.Core.UI.Models.ContentTypes]' to type 'System.Linq.IQueryable
1 [Project.Core.UI.Models.ContentTypes]的对象
Mapper.CreateMap<
ContentType, Project.Core.UI.Models.ContentTypes>
();
在OData控制器方法
public IQueryable<
ContentTypes>
Get() {...}
中,使用:var result = Mapper.Map<
IQueryable<
ContentType>
, IQueryable<
ContentTypes>
>
(_repository.Query().Get()
.Where(u =>
u.UserId == userId)
.OrderBy(o =>
o.Description));
我也试过以下但我怀疑这正是上面的内容:
var result =_repository.Query().Get()
.Where(u =>
u.UserId == userId)
.OrderBy(o =>
o.Description);
var dto = Mapper.Map<
IQueryable<
ContentType>
, IQueryable<
ContentTypes>
>
(result);
return dto;
如何为此创建适当的映射?
答案您需要了解通过以这种方式创建映射这一事实:
Mapper.CreateMap<
ContentType, Project.Core.UI.Models.ContentTypes>
();
隐式支持这些基本泛型集合类型:
IEnumerable
IEnumerable<
T>
ICollection
ICollection<
T>
IList
IList<
T>
List<
T>
Arrays
但不是
IQueryable<
T>
。这就是你得到例外的原因。所以你应该尝试这样做:
var dto = Mapper.Map
<
IEnumerable<
ContentType>
,
IEnumerable<
ContentTypes>
>
(result.AsEnumerable());
// or e.g. List/List/ToList()
另一答案除了bejger所说的你还可以使用Automapper中的QueryableExtensions命名空间来映射IQueryable对象,但是当你执行你的limitations时,它会对你在两个对象之间做什么设置放一些
CreateMap<
TSource, TDest>
而不是喜欢它
IQueryable<
ContentTypes>
dto = Mapper.Map<
IQueryable<
ContentType>
, IQueryable<
ContentTypes>
>
(result);
你反而喜欢它
IQueryable<
ContentTypes>
dto = result.Project().To<
ContentTypes>
();
另一答案您可以使用“ProjectTo”方法。
var result = iQueryableResultSet.ProjectTo<
MyObjectName>
(_mapper.ConfigurationProvider);
【如何解决 - 无法使用Automapper将Generic.List强制转换为Linq.IQueryable()】(可选)根据需要从任何注入的Mapper实例传递ConfigurationProvider。
推荐阅读
- 如何修复TypeError(application_module__WEBPACK_IMPORTED_MODULE_1 ___ default.a不是构造函数)
- 使用Automapper优化相关子查询
- 返回ApplicationUser对象或ApplicationUserId字符串的列表
- Spring @RequestMapping注释到不同的位置
- 使用Azure App Service Logging时是否需要blob StorageExceptions()
- 从密钥保险库将证书上载到App Service
- 禁用Azure App Services上的某些W3C日志记录字段
- 如何获取Azure App Service的特定用户分配的托管服务标识的令牌()
- 具有真实电话号码的Firebase PhoneAuth不工作但白名单号正在运行 - Android