C# 是否可以映射IQueryable<;CatDTO>;到IQueryable<;CatEf>;?

C# 是否可以映射IQueryable<;CatDTO>;到IQueryable<;CatEf>;?,c#,.net,entity-framework,automapper,dto,C#,.net,Entity Framework,Automapper,Dto,这是一个汽车制造商专业人士的问题。我已经试着做查询映射好几天了,但没有成功。似乎Automapper不打算以我想要的方式使用它。但也许我错了。所以问题是 我有这样的课程: CatDto(姓名、年龄、玩具(玩具对象集合)) ToyDto(CatName、ToyName、Cat(父CatDto对象)) Cat(来自实体框架,具有与CatDto中类似的属性) Toy(来自实体框架,具有与ToyDto中类似的属性) 我想在数据访问层中编写一个通用读取函数,如下所示: IEnumerable<C

这是一个汽车制造商专业人士的问题。我已经试着做查询映射好几天了,但没有成功。似乎Automapper不打算以我想要的方式使用它。但也许我错了。所以问题是

我有这样的课程:

  • CatDto(姓名、年龄、玩具(玩具对象集合))
  • ToyDto(CatName、ToyName、Cat(父CatDto对象))
  • Cat(来自实体框架,具有与CatDto中类似的属性)
  • Toy(来自实体框架,具有与ToyDto中类似的属性)
我想在数据访问层中编写一个通用读取函数,如下所示:

IEnumerable<CatDto> Read(IQueryable<CatDto> query) {
    // here "query" is converted 
    // to Entity Framework query by means of AutoMapper,
    // EF query gets executed,
    // I convert EF entities (Cat) back to CatDto - this is not essential
    // result is returned
}

迄今为止,任何实施此类行为的尝试都失败了。我想知道Automapper是这里的帮手,还是我完全走错了路?

我相信您想要的功能已经实现了

您不能映射IQueryable,但不需要使用UseAsDataSource 范例

IQueryable someResultVar=new ObjectModel.Collection(属于CatDto)).AsQueryable().UseAsDataSource().For(属于OrderLineDTO)。其中(c=>c.Toys.Count()>1);

当您枚举时,它会将Lambda从CatDto转换为CatEf,并调用
ProjectTo
并返回CatDto对象

,请查看@stuartd是否已完成该操作-该页面没有帮助。因此,您尝试使用该页面中推荐的投影语法,即
return query.ProjectTo()
?如果你把这些细节包括在你的问题中会有帮助,以节省每个人的时间。好吧,我没有把它包括在问题中(还有很多其他技巧),因为它们都不起作用。我假设有人对这个问题有了答案,他也走了我的路,去过那里并做了那件事,但在其他地方找到了解决办法。当然,如果能找到解决办法。
var q = new ObjectModel.Collection(Of CatDto)).AsQueryable();
q = q.Where(c => c.Toys.Count() > 1);
var someResultVar = Read(q);
IQueryable<CatDto> someResultVar  = new ObjectModel.Collection(Of CatDto)).AsQueryable().UseAsDataSource().For(Of OrderLineDTO).Where(c => c.Toys.Count() > 1);