是否可以将IQueryable <catdto>映射到IQueryable <catef>?

时间:2016-06-22 10:39:29

标签: c# .net entity-framework automapper dto

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

我有这样的课程:

  • CatDto(名称,年龄,玩具(ToyDto对象的集合))
  • ToyDto(CatName,ToyName,Cat(父级CatDto对象))
  • Cat(来自Entity Framework,具有与CatDto类似的属性)
  • 玩具(来自实体框架,具有与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
}

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

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

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

1 个答案:

答案 0 :(得分:2)

我相信您想要的功能在UseAsDataSource

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

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

当你枚举它会将Lambda从CatDto转换为CatEf并调用ProjectTo<CatDto>并返回CatDto对象