是否可以将 IQueryable<CatDTO> 映射到 IQueryable<CatEf>?

Is it possible to map IQueryable<CatDTO> to IQueryable<CatEf>?

这是一个针对 Automapper 专业人士的问题。我已经尝试做查询映射好几天了——但没有成功。似乎 Automapper 不打算按照我想要的方式使用它。但也许我错了。那么问题来了...

我有这样的类:

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

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 是这里的帮手还是我走错了路?

我相信您想要的功能在 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> 和 return CatDto 对象