Fork me on GitHub

【记录】AutoMapper Project To OrderBy Skip Take 正确写法

AutoMapper:Queryable Extensions

示例代码:

using (var context = new orderEntities())
{
    return context.OrderLines.Where(ol => ol.OrderId == orderId)
                .Project().To<OrderLineDTO>().ToList();
}

这是 Jimmy Bogard 提供的一段使用.Project().To的示例代码,但如果加上.OrderBy(ol => ol.OrderId).Skip(skip).Take(take)(Linq 分页)这段代码,使用 SQL Server Profiler 跟踪生成的 SQL 语句,就会发现.Project().To DTO 映射转换并没有起到效果,还是查询的所有列,在 stackoverflow 上找到一个相关的问题,他是把 Linq 分页代码放在 Project 的后面,我试过这种写法,但是会抛出异常,因为.OrderBy(ol => ol.OrderId)放在后面,访问的 OrderId 属性类型应该是 OrderLineDTO,而不是 OrderLine。

错误写法:

using (var context = new orderEntities())
{
    return context.OrderLines.Where(ol => ol.OrderId == orderId)
                .OrderBy(ol => ol.OrderId).Skip(skip).Take(take).Project().To<OrderLineDTO>().ToList();
                //或者 .Project().To<OrderLineDTO>().OrderBy(ol => ol.OrderId).Skip(skip).Take(take).ToList();
}

测试可用的正确写法:

using (var context = new orderEntities())
{
    return context.OrderLines.Where(ol => ol.OrderId == orderId)
                .OrderBy(ol => ol.OrderId).Project().To<OrderLineDTO>().Skip(skip).Take(take).ToList();
}
posted @   田园里的蟋蟀  阅读(893)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示