Linq为每个父项选择10个子项

本文关键字:选择 10个 Linq | 更新日期: 2023-09-27 18:24:22

我使用的是嵌套集模型,希望能够选择10个父项,以及每个父项的10个子项,这些项都是有序的。

我正在尝试编写一个嵌套的注释系统,通过该系统,对注释的回复将通过在其"父"注释中具有左值和右值来表示。

减少检索到的大量项目列表的加载时间,我真的很头疼,我相信如果我能在一个Linq语句中完成以上操作,那么我可能会比反复调用数据库为每个家长获取10个孩子节省更多的时间。

我使用this语句从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循环parentItems(我目前正在做),并在每次迭代中对数据库进行10次或(pageSize)调用,我如何用Linq语句获取每个父节点的10个子节点?

编辑:

我使用的是嵌套集模型。我的项目有左位置和右位置(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个孩子?

感谢的任何帮助

Linq为每个父项选择10个子项

    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属性访问父项。。。