是否可以将 IQueryable<CatDTO> 映射到 IQueryable<CatEf>?
Is it possible to map IQueryable<CatDTO> to IQueryable<CatEf>?
这是一个针对 Automapper 专业人士的问题。我已经尝试做查询映射好几天了——但没有成功。似乎 Automapper 不打算按照我想要的方式使用它。但也许我错了。那么问题来了...
我有这样的类:
- CatDto(姓名、年龄、玩具(ToyDto 对象的集合))
- ToyDto(CatName、ToyName、Cat(父 CatDto 对象))
- Cat(来自 Entity Framework,具有类似于 CatDto 中的属性)
- 玩具(来自 Entity Framework,具有与 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 是这里的帮手还是我走错了路?
我相信您想要的功能在 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 对象
这是一个针对 Automapper 专业人士的问题。我已经尝试做查询映射好几天了——但没有成功。似乎 Automapper 不打算按照我想要的方式使用它。但也许我错了。那么问题来了...
我有这样的类:
- CatDto(姓名、年龄、玩具(ToyDto 对象的集合))
- ToyDto(CatName、ToyName、Cat(父 CatDto 对象))
- Cat(来自 Entity Framework,具有类似于 CatDto 中的属性)
- 玩具(来自 Entity Framework,具有与 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 是这里的帮手还是我走错了路?
我相信您想要的功能在 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 对象