2012-02-14 118 views
0

我正在使用一个嵌套集合模型,并希望能够为每个父项目选择10个父项目以及10个子项目,这些子项目是按顺序排列的。Linq为每个父项目选择10个子项

我想写一个嵌套评论系统,其中评论的回复将通过其“父”评论中的左值和右值表示。

我有一个真正的头痛,减少了正在检索的大项目列表的加载时间,并且相信如果我可以在单个Linq语句中完成上述操作,那么我可以比重复调用要节省更多的时间数据库为每个父母获得10个孩子。

我使用此语句从datacontext获取父项(或根项目)。

var query = context.Items 
        .Where(x => !context.Items.Any(y => y.LeftPos < x.LeftPos 
                && y.RightPos > x.RightPos)) 
        .OrderBy(x => x.Id) 
        .Take(pageSize) 
        .ToList(); 

上面的代码是通过检查获得在嵌套集合模型的最外(亲本)的物品没有任何其他物品与他们的外部左侧和右侧的值。因此,如何在每次迭代时循环使用foreach(我现在正在做这件事)并在数据库中调用10或(pageSize)调用10次,我怎样才能将每个父节点的10个子节点与Linq声明?

编辑:

我正在使用嵌套集模型。我的物品有左和右位置(leftPos和rightPos)。所以,一个孩子是一个物体,在另一个物体的左右值中有左右值,而这个值又是父物体。

1 a 4 
    2 b 3 

,所以如果我有很多项目

1 a 4 
2 b 3 
5 c 10 
6 d 7 
8 e 9 
11 f 14 
12 g 13 

....

的有没有一种方法,我可以选择使用LINQ每个单亲家庭子女X量?

任何帮助表示赞赏

+4

如果你把它放在多行上,代码会少得多眼睛... – 2012-02-14 13:32:04

+1

不是很多,说实话。 ..现在自己编辑它 - 看看你的想法... – 2012-02-14 13:36:52

+1

好的,现在的代码更清晰,你可以提供更多关于你的模型的细节?我不清楚父母/子女关系在这里。 – 2012-02-14 13:39:33

回答

2
class Program 
    { 
     static void Main(string[] args) 
     { 
      List<A> lst = new List<A>(); 

      for (int j = 1; j < 4; j++) 
      { 
       var tmp = new A() { Value = j * 1000 }; 
       for (int i = 0; i < 150; i++) 
       { 
        tmp.SubItems.Add(new B { Value = i + 1, Parent = tmp }); 
       } 
       lst.Add(tmp); 
      } 

      List<B> result = lst.SelectMany(x => x.SubItems.Take(10)).ToList(); 
     } 
    } 

    public class A 
    { 
     public A() 
     { 
      SubItems = new List<B>(); 
     } 

     public int Value { get; set; } 
     public List<B> SubItems { get; set; } 
    } 


    public class B 
    { 
     public int Value { get; set; } 
     public A Parent { get; set; } 
    } 

不知道这是你想要的。这样你可以得到一系列子项目。每个家长的10个子项目。你可以访问每个子项目的.Parent属性的父母...

+1

我不循环!我循环创建示例数据。 lst.SelectMany(x => x.SubItems.Take(10))是唯一的linq调用。 – Jaster 2012-02-14 14:21:06