代码之家  ›  专栏  ›  技术社区  ›  Hans Kesting

EF4父孙查询

  •  3
  • Hans Kesting  · 技术社区  · 14 年前

    我有一个与父母、子女和孙子女的模特,在一个多对多的关系中。使用 this article 我创建了可以正常工作的POCO类,但有一件事我还没弄清楚。

    当我直接使用LINQ查询父级或子级时,SQL反映了LINQ查询(A .Count() 在数据库中执行一个计数,依此类推)-好的。父类具有子属性,可以访问它的子类。但(现在的问题是)这不会暴露 IQueryable 界面,但 ICollection . 所以当我访问特定父对象的Children属性时 全部的 父母的孩子都被识读了。更糟糕的是,当我接触到孙子孙女时( theParent.Children.SelectMany(child => child.GrandChildren).Count() )然后对每个孩子发出一个单独的请求来选择其孙子的所有数据。这是很多单独的查询!

    将子属性的类型从ICollection更改为IQueryable并不能解决此问题。除了缺少我需要的方法(如add()和remove())之外,ef当时不识别navigation属性。

    是否有正确的方法(如:低数据库交互)通过子级(以及它们是什么)进行查询?或者这是不可能的?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Hans Kesting    14 年前

    我找到的一个解决办法是从中间开始,在孩子们那里:

    var gc = context.Children
      .Where(c => c.Parents.Any(p => p.Id == theParent.Id))
      .SelectMany(c => c.GrandChildren);
    
    int cnt = gc.Count();
    

    至少这会给出一个SQL查询,它只返回孙子的数目,而不是所有中间数据。