[英]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.