繁体   English   中英

为什么这两个查询在Entity Framework中返回不同的结果?

[英]Why do these two queries return different results in Entity Framework?

我在实体框架中编写了以下查询,并且值不同。

var query = from p in db.Parents
            let children = p.Children
            let grandchildren = children.SelectMany(c => c.Grandchildren)
            select new 
            {
                Count1 = children.Count(c => !c.Grandchildren.Any()),
                Count2 = children.Count(c => !grandchildren.Any())
            };

Count1属性返回我期望的值,而Count2不返回。

我试图返回没有任何孙子对象的子代数。 在这种情况下,Count2似乎返回0,但是Count1返回1并带有以下数据集:

父母

Id
------  
1

儿童

Id    ParentId
--------------
1     1
2     1

孙子

Id    ChildId
-------------
1     1

我有两个孩子,其中只有一个有孩子。 为什么第二个查询似乎不按照我认为的方式工作?

我的对象如下:

public class Parent {
    public int Id { get; set; }
    public virtual ICollection<Child> Children { get; set; }
}

public class Child { 
    public int Id { get; set; }
    public int ParentId { get; set; }
    public virtual ICollection<Grandchild> Grandchildren { get; set; }
}

public class Grandchild {
    public int Id { get; set; }
    public int ChildId { get; set; }
}
grandchildren.Any()

如果您的grandchildren集合中有任何对象,则只是返回。 因此,除非SelectMany返回零结果,否则它将始终返回true。

因此,除了Count2 = 0 ,您什么都不会得到,因为如果有任何结果,则!grandChildren.Any()将等于0。

问题出在您的grandchildren范围变量上。 它包含所有子孙( 过滤到特定的子孙),因此Count2始终在考虑整个树中是否有任何子孙。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM