C# 如何解决-无法使用自动映射将Generic.List强制转换为Linq.IQueryable?
我在使用DTO和EF模型时遇到以下错误: 无法强制转换类型为的对象 'System.Collections.Generic.ListC# 如何解决-无法使用自动映射将Generic.List强制转换为Linq.IQueryable?,c#,entity-framework,generics,automapper,C#,Entity Framework,Generics,Automapper,我在使用DTO和EF模型时遇到以下错误: 无法强制转换类型为的对象 'System.Collections.Generic.List1[Project.Core.UI.Models.ContentTypes]' 输入'System.Linq.IQueryable1[Project.Core.UI.Models.ContentTypes] 引导:Mapper.CreateMap() 在OData控制器方法public IQueryable Get(){…}中,使用: var result = Ma
1[Project.Core.UI.Models.ContentTypes]'
输入'System.Linq.IQueryable
1[Project.Core.UI.Models.ContentTypes]
引导:Mapper.CreateMap()代码>
在OData控制器方法public IQueryable Get(){…}
中,使用:
var result = Mapper.Map<IQueryable<ContentType>, IQueryable<ContentTypes>>(_repository.Query().Get()
.Where(u => u.UserId == userId)
.OrderBy(o => o.Description));
var result=Mapper.Map(_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;
var result=\u repository.Query().Get()
.Where(u=>u.UserId==UserId)
.OrderBy(o=>o.Description);
var dto=Mapper.Map(结果);
返回dto;
如何为此创建适当的映射?您需要了解这样一个事实:通过以这种方式创建映射:
Mapper.CreateMap<ContentType, Project.Core.UI.Models.ContentTypes>();
Mapper.CreateMap();
仅隐式支持以下基本泛型集合类型:
IEnumerable
IEnumerable<T>
ICollection
ICollection<T>
IList
IList<T>
List<T>
Arrays
IEnumerable
数不清
I收集
I收集
伊里斯特
伊里斯特
列表
阵列
但不是IQueryable
。这就是为什么你会有例外
因此,你应该尝试这样做:
var dto = Mapper.Map
<IEnumerable<ContentType>,
IEnumerable<ContentTypes>>(result.AsEnumerable());
// or e.g. List/List/ToList()
var dto=Mapper.Map
(result.AsEnumerable());
//或如列表/列表/列表()
除了bejger所说的之外,您还可以使用AutoMaper中的名称空间映射IQueryable对象,但它提供了一些在执行CreateMap
时可以在两个对象之间执行的设置
而不是像这样使用它
IQueryable<ContentTypes> dto = Mapper.Map<IQueryable<ContentType>, IQueryable<ContentTypes>>(result);
IQueryable dto=Mapper.Map(结果);
而是像这样使用它
IQueryable<ContentTypes> dto = result.Project().To<ContentTypes>();
IQueryable dto=result.Project().To();
您可以改用“ProjectTo”方法
var result = iQueryableResultSet.ProjectTo<MyObjectName>(_mapper.ConfigurationProvider);
var result=iQueryableResultSet.ProjectTo(\u mapper.ConfigurationProvider);
根据需要,您可以选择从任何注入的映射器实例传递ConfigurationProvider。在本例中,Project()
来自何处?结果没有任何引用。要同时使用Project()
和to()
,您需要使用AutoMapper.QueryableExtensions添加代码>到文件的顶部。