You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF是否会像优化匿名类型投影一样优化命名类型投影?

EF Core投影到命名类型是否仅加载所需列?

在EF Core的高效查询相关内容中提到,将实体查询投影到匿名类型时,EF只会加载指定的列,示例写法如下:

context.Blogs.Select(b => new { b.Id, b.Url })

针对你提出的两种投影到命名类型的写法,EF Core都能识别并仅加载所需的Id和Url列:

  • 写法一:对象初始化器
context.Blogs.Select(b => new BlogModel { Id = b.Id, Url = b.Url })

EF Core会分析初始化器中用到的属性,生成仅包含Id和Url列的SQL查询,不会加载Blog实体的其他列。

  • 写法二:构造函数+对象初始化器
context.Blogs.Select(b => new BlogModel(b.Id) { Url = b.Url })

这种写法EF Core同样能正确解析,它会识别构造函数参数对应的Id属性,以及初始化器里的Url属性,最终只查询这两个列。

需要注意:只要BlogModel不是EF Core跟踪的实体类型(一般这类用于投影的都是DTO类),就会正常触发这个优化。

内容的提问来源于stack exchange,提问作者Kevin Krumwiede

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 13:54:50