2012-03-16 43 views
0

我已經在實體框架中編寫了下面的查詢,並且這些值是不同的。爲什麼這兩個查詢在實體框架中返回不同的結果?

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()) 
      }; 

的共1個記錄屬性返回我的期望,共2個記錄沒有。

我想返回沒有任何孫子對象的孩子的數量。共2個記錄似乎在這種情況下返回0,但共1個記錄與以下數據集返回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; } 
} 

回答

1
grandchildren.Any() 

如果在您的收藏grandchildren任何物體被簡單地返回。所以它會一直返回true,除非您的SelectMany返回零結果。

所以,你永遠不會得到任何東西,但Count2 = 0,因爲如果有任何結果!grandChildren.Any()將等於0。

+0

so!!grandChildren.Any()將始終返回0 – naspinski 2012-03-16 17:05:02

0

問題是與你的grandchildren範圍變量。它包含全部孫子(不是過濾到一個特定的孩子),所以Count2始終考慮是否有整個樹中的任何孫子。

相關問題