我在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; }
}
答案 0 :(得分:1)
grandchildren.Any()
如果您的grandchildren
集合中有任何对象,就会返回。因此,除非SelectMany
返回零结果,否则它将始终返回true。
所以,除了Count2 = 0
之外你永远不会得到任何东西,因为如果有任何结果!grandChildren.Any()
将等于0。
答案 1 :(得分:0)
问题在于您的grandchildren
范围变量。它包含所有孙子(不过滤到特定孩子),因此Count2始终在考虑整个树中是否有任何孙子。< / p>