是否可以将IQueryable 映射到IQueryable ?

这是Automapper专业人士的问题。 我已经尝试了几天的查询映射 – 并且没有运气。 似乎Automapper并不打算以我想要的方式使用它。 但也许我错了。 所以这是问题……

我有这样的课程:

  • CatDto(名称,年龄,玩具(ToyDto对象的集合))
  • ToyDto(CatName,ToyName,Cat(父CatDto对象))
  • Cat(来自Entity Framework,具有与CatDto类似的属性)
  • 玩具(来自entity framework,具有与ToyDto类似的属性)

我想在我的数据访问层中编写一个通用的读取函数,如下所示:

IEnumerable Read(IQueryable 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 } 

我将以不同的方式调用此函数。 例:

 var q = new ObjectModel.Collection(Of CatDto)).AsQueryable(); q = q.Where(c => c.Toys.Count() > 1); var someResultVar = Read(q); 

到目前为止,任何实现此类行为的尝试都失败了。 我想知道Automapper是否是这里的帮手还是我完全错了?

我相信你想要的function在UseAsDataSource中

您无法映射IQueryable,但您不需要使用UseAsDataSource示例

 IQueryable someResultVar = new ObjectModel.Collection(Of CatDto)).AsQueryable().UseAsDataSource().For(Of OrderLineDTO).Where(c => c.Toys.Count() > 1); 

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