【问题标题】:C# LINQ to Entity .CountC# LINQ to Entity .Count
【发布时间】:2012-03-13 21:40:58
【问题描述】:

我是实体框架的新手。我试图从应该返回 1 个结果的 LINQ 查询中获取计数。计数始终为 0。我知道数据在那里,并且 edmx 中的关系是健全的。

代码如下:

LineItem li = order.LineItems.Where(i => i.ID == lineItemId).FirstOrDefault(); 如果 (li != null) { if (li.Notes.Count > 0) { // 获取笔记数据 } }

现在 ListItem 不为空,因此我可以进行计数调用。我再次验证了我的数据作为我的调试网 .Where 匹配为“52635 == 52635”

为了得到我的计数,我这里有什么遗漏吗?或者对我如何进一步调试这个问题有什么建议?

我正在使用 Entity Framework 4 +

谢谢!

【问题讨论】:

  • 您是否已进入调试器并在调用 Count 时检查了 li.Notes?我怀疑问题存在,而不是 count 属性。
  • 显示检索order 的代码,问题可能就在那里(正如@DanielAWhite 的回答所暗示的那样)。
  • 如果我能够通过导航属性访问我的笔记,我是否需要一个 .Include?关系存在,当我尝试使用 .Include 时出现错误。
  • 除非您指定,否则不会加载注释。确定实体名称:是“Notes”还是“LineItemNotes”

标签: c# linq entity-framework linq-to-entities


【解决方案1】:

确保您Include 备注。

【讨论】:

  • 谢谢。当我尝试这样做时: LineItem li = order.LineItems.Include("LineItemNotes").Where(i => i.ID == lineItemId).FirstOrDefault();我得到:CS0122:'System.Data.Objects.DataClasses.RelatedEnd.Include(bool, bool)' 由于其保护级别而无法访问
【解决方案2】:

+1 包括注释。完成后,您应该使用更高效的if(li.Notes.Any()) 代替if(li.Notes.Count() > 0)

此外,您可能会发现使用 li.Notes.Count(Notes 使用的集合类型的属性)与 li.Notes.Count()(Linq 扩展方法)的工作方式不同。如果不检查您是否需要 Include,我不相信。

【讨论】:

    【解决方案3】:

    我发现这是数据库中的记录被删除的问题。对不起大家!不过感谢您的帮助!

    【讨论】:

      猜你喜欢
      • 2016-11-24
      • 1970-01-01
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 2015-08-20
      • 2012-11-15
      相关资源
      最近更新 更多