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

使用C# LinQ无法从数据库选择特定字段的问题排查

解决EF中使用匿名类投影查询时的DbDataRecord引用错误

我完全懂你碰到的这个坑!我之前在维护.NET Framework下的EF项目时也遇到过一模一样的问题——全量查实体没问题,一用select new {}挑字段就报这个DbDataRecord的引用错误。

问题根源

这个报错的核心原因是:当你使用匿名类型做字段投影时,EF底层会用到System.Data程序集里的DbDataRecord类型来处理查询的中间结果;但你的项目没有引用这个程序集,所以编译失败。而全量查询直接返回实体对象时,EF的执行路径不需要依赖这个类型,所以能正常运行。

具体修复步骤

  1. 添加System.Data程序集引用
    • 右键点击你的805AdminPortal.Reports项目,选择「添加」→「引用」
    • 在弹出的「引用管理器」窗口中,切换到「程序集」→「框架」标签
    • 找到并勾选System.Data(版本是4.0.0.0的那个),点击「确定」保存
  2. 重新编译并验证
    重新运行你的投影查询代码:
    (from YTD_Tbl in objReport.Batter_YTD_Tbl select new { test = YTD_Tbl.AB}) .ToList();
    
    这时候应该就能正常返回匿名类型的列表了。

额外提示

如果你是在.NET Core/.NET 5+的项目里,System.Data已经被整合到基础类库中,不会出现这个问题;但你的项目明显是基于.NET Framework的,所以必须手动添加这个引用。另外,如果你之后还要用到更多EF的投影或复杂查询,这个引用也会帮你避免类似的依赖错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:57:17