Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解决-无法使用自动映射将Generic.List强制转换为Linq.IQueryable?_C#_Entity Framework_Generics_Automapper - Fatal编程技术网

C# 如何解决-无法使用自动映射将Generic.List强制转换为Linq.IQueryable?

C# 如何解决-无法使用自动映射将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

我在使用DTO和EF模型时遇到以下错误:

无法强制转换类型为的对象 'System.Collections.Generic.List
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添加
到文件的顶部。