【问题标题】:LINQ eager loading | doesn't find method "include"LINQ 急切加载 |找不到方法“包含”
【发布时间】:2015-04-16 17:20:56
【问题描述】:

我正在尝试使用 LINQ 进行一些急切的加载。问题是它无法识别“Include”方法...

            var bbs = (from bbo in db.BuildByOffers
                   where bbo.offerID == offerID
                   select bbo.BuildingsBlock).Include("deliverable");

我添加了这个命名空间

using System.Data.Entity;

产生的编译器错误:

System.Linq.IQueryable' 没有 包含“包含”的定义,并且没有扩展方法“包含” 接受类型的第一个参数 'System.Linq.IQueryable' 可能是 找到(您是否缺少 using 指令或程序集引用?)

解决方案 查询是一种仅返回 BuildingBlock 列表的方法。 我的实际问题是,当我调用此方法并在列表中循环时,当我尝试“Buildingblock.deliverable.description”时,它不起作用。 我刚做了这个

Deliverable deli = buildingblock.Deliverable;
deli.description;

我没有很好地解释我的问题,对不起

感谢您的帮助!

【问题讨论】:

  • 你得到的编译时错误是什么?发布错误消息。
  • 错误 4 'System.Linq.IQueryable' 不包含 'Include' 的定义,并且没有扩展方法 'Include' 接受类型为 'System.Linq.IQueryable 的第一个参数' 可以找到(您是否缺少 using 指令或程序集引用?)
  • 你没有发布上下文代码,而是BuildByOfferclass

标签: c# linq


【解决方案1】:

包含可用于ObjectQuery<T> 请参阅here msdn。

我建议您在 dbset 上应用 Include 方法,如下所示:

var bbs = (from bbo in db.BuildByOffers.Include("BuildingsBlock").Include("BuildingsBlock.deliverable")
               where bbo.offerID == offerID
               select bbo.BuildingsBlock)

【讨论】:

  • 同样的错误:“System.Data.Linq.Table 不包含包含的定义
  • 我忘了提。是的,我是
  • @Weedoze 发布有问题的 Context 类,所有答案都假设您在上下文中使用 DbSet,但您似乎没有使用 DbSet。
  • 如果您的意思是对查询的解释。在 buildByOffer 中,我得到了 2 个外键,我想得到构建块,然后在这个构建块中,另一个“可交付”的外键
【解决方案2】:

Include 方法在DbQuery<T> 上定义,并作为IQueryable<T> 的扩展方法。

您需要导入 System.Data.Entity 命名空间,以便编译器识别该扩展方法。

但是...

这里真正的问题是你在错误的地方调用Include,你需要在进一步投影之前在源DbSet<T>上调用Include

var bbs = (from bbo in db.BuildByOffers.Include("deliverable")
           where bbo.offerID == offerID
           select bbo.BuildingsBlock);

【讨论】:

  • System.data.entity 已导入但仍无法正常工作
  • 不确定...如何检查?
  • 右键单击您的项目和“管理 NuGet 包”,在“已安装的包”窗格中检查“EntityFramework”。
  • 您的代码中的db 是什么?你在使用实体框架吗?
  • SQL server 数据库和我通过实体框架生成 C# 类
【解决方案3】:

尝试在您的代码中添加using System.Data.Objects;

【讨论】:

    【解决方案4】:

    在调用Include 之前将其投影到IQueryable<T>。像这样:

    var bbs = (from bbo in db.BuildByOffers
               where bbo.offerID == offerID
               select bbo.BuildingsBlock).AsQueryable().Include("deliverable");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-09
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      相关资源
      最近更新 更多