2012-03-13 107 views
1

我是新来的实体框架。我试图从应该返回1结果的LINQ查询中获得计数。计数总是0。我知道数据在那里,EDMX中的关系是健全的。C#LINQ to Entity .Count

下面是代码:

 
LineItem li = order.LineItems.Where(i => i.ID == lineItemId).FirstOrDefault(); 
if (li != null) 
{ 
    if (li.Notes.Count > 0) 
    { 
     // Get note data 
    } 
} 

现在列表项不为空,所以我能去的次数呼叫。我再次验证,我有我的数据作为我的调试网.Where匹配为“52635 == 52635”

有没有什么我在这里失踪,为了让我的数量?或者有什么建议可以让我进一步调试这个问题?

我正在使用实体框架4 +

谢谢!

+0

你是否已经进入了一个调试器并检查了li.Notes在你调用Count的地方?我怀疑这个问题在那里,而不是与伯爵财产。 – 2012-03-13 13:05:59

+0

显示检索'订单'的代码,问题可能存在(正如@DanielAWAhite的答案所暗示的那样)。 – Jamiec 2012-03-13 13:08:04

+0

如果我能够通过导航属性访问笔记,是否需要一个.Include?关系在那里,当我尝试使用.Include时出现错误。 – Jared 2012-03-13 13:20:34

回答

0

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

2

确保你有Include的笔记。

+0

谢谢。当我尝试: LineItem li = order.LineItems.Include(“LineItemNotes”)。其中(i => i.ID == lineItemId).FirstOrDefault();我得到:CS0122:'System.Data.Objects.DataClasses.RelatedEnd.Include(bool,bool)'由于其保护级别而无法访问 – Jared 2012-03-13 13:13:44

1

+1上包含注释。当你这样做时,你应该使用效率更高的if(li.Notes.Any())代替if(li.Notes.Count() > 0)

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