Linq selecciona 10 niños para cada elemento principal -- # campo con linq campo con foreach campo con children campo con nested-sets camp Relacionados El problema

Linq select 10 children for each parent item


0
vote

problema

Español

Estoy usando un modelo establecido anidado y quiero poder seleccionar 10 elementos principales, así como 10 artículos para niños para cada padre, que se ordenan.

Estoy tratando de escribir un sistema de comentarios anidados, por lo que se firmará una respuesta a un comentario al tener valores izquierdo y derecho dentro de su comentario 'padre'.

Estoy teniendo un dolor de cabeza real Reducir los tiempos de carga de las grandes listas de elementos que se están recuperando y creo que si pudiera hacer lo anterior en una sola declaración de Linq, podría ahorrar mucho más tiempo que hacer llamadas repetidas a la DB para obtener 10 niños para cada padre.

Utilizo esta declaración para obtener el padre (o los elementos root) del 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();   

El código anterior es obtener los elementos más externos (padre) en el modelo establecido anidado marcando, no hay otros elementos con los valores izquierdo y derecho fuera de los suyos.

SO, en lugar de bucle a través de los padres con un folleto (que estoy haciendo actualmente) y la realización de 10 o (Pay Paysize) llama a la DB en cada iteración, ¿cómo puedo tomar 10 hijos de cada nodo padre con una declaración LINQ ?

Editar:

Estoy usando el modelo establecido anidado. Mis artículos tienen posiciones a la izquierda y derecha (LeftPOS y RUTTPOS). Por lo tanto, un niño es un objeto con valores izquierdo y derecho dentro de los valores izquierdo y derecho de otro objeto, que a su vez sería el padre.

  1 a 4   2 b 3   

Así que si tengo muchos artículos

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

....

¿Hay alguna forma en que puedo seleccionar X cantidad de niños de cada padre usando LINQ?

Cualquier ayuda apreciada

Original en ingles

I am using a nested set model and want to be able to select 10 parent items, as well as 10 child items for each parent, which are ordered.

I am trying to write a nested comment system, whereby a reply to a comment will be signified by having left and right values within its 'parent' comment.

I am having a real headache reducing the load times of large lists of items being retrieved and believe if I could do the above in a single Linq statement then I might be able to save a lot more time than making repeated calls to the db to get 10 children for each parent.

I use a this statement to get the parent(or root items) from the 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(); 

The above code is getting the outermost (parent) items in the nested set model by checking there are not any other items with left and right values outside of theirs.

So, rather than looping through the parentItems with a foreach (which I am doing currently) and making 10 or (pageSize) calls to the db on each iteration, how can I take 10 children of each parent node with a Linq statement?

EDIT:

I am using the nested set model. My items have left and right positions (leftPos and rightPos). So a child is an object with left and right values within the left and right values of another object, which in turn would be the parent.

1 a 4   2 b 3 

so if I have a lot of items

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

....

Is there a way I can select x amount of children from each parent using Linq?

Any help appreciated

              
     
     

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 
      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; }     }   

No estoy seguro de si esto es lo que quieres. De esta manera obtienes una colección de subjetivos. 10 subositores de cada padre. Puede acceder a los padres con la propiedad .Parente de cada subsemem ...

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

not sure if this is what you want. this way you get a collection of subitems. 10 subitems of each parent. you can access the parents with the .Parent property of each subitem...

 
 
 
 

Relacionados problema

25  Mover el nodo en conjunto anidado  ( Move node in nested set ) 
Necesito una consulta de MySQL que mueva un nodo y todos sus hijos dentro de un conjunto anidado. Encontré este sitio , pero esa función parece tan ilógica -...

1  ¿Cómo crear una lista de selección dinámica con forma simple y increíble conjunto anidado en rieles 3.1?  ( How to create a dynamic select list using simple form and awesome nested set in ) 
¿Podría alguien explicar cómo crear una selección desplegable generada dinámicamente que muestra etiquetas de nombre al visitante web y escribe el ID correspo...

1  PHP: Ordenar datos de conjuntos anidados  ( Php sort data from nested sets ) 
Actualmente estamos construyendo un sitio web con una tabla MySQL categorizada que contiene varias competencias, y notamos que el modelo establecido anidado s...

0  Construye menú dinámico usando conjuntos anidados  ( Build dynamic menu using nested sets ) 
Estoy tratando de construir un menú dinámico en mi PHP CMS; Las páginas / categorías se organizan utilizando el modelo de conjuntos anidados. Árbol completo...

4  PHP: Ordenar una matriz  ( Php sort an array ) 
Tengo una matriz con datos de una tabla MySQL en un modelo establecido anidado, me gustaría ser ordenado, no solo alfabético, sino también con los nodos infan...

6  Buscando la mejor clase de conjuntos de PHP (clase excluida)  ( Searching for the best php nested sets class pear class excluded ) 
Estoy buscando una clase de conjuntos anidados de PHP (con MySQL) con todas las funciones necesarias. Por ejemplo: createleftnode, createrightnode, createro...

1  Coincide con todos los personajes en grupo, excepto por la primera y la última ocurrencia  ( Match all characters in group except for first and last occurrence ) 
Di que solicito parent/child/child/page-name en mi navegador. Quiero extraer el padre, los niños, así como el nombre de la página. Aquí están las expre...

1  ¿Cómo voy a hacer un contenido web de enlace en una base de datos con un modelo establecido anidado?  ( How do i go about link web content in a database with a nested set model ) 
Mi tabla establecida anidada es la siguiente. create table depts ( id int identity(0, 1) primary key , lft int , rgt int , name nvarchar(60) ...

2  Obtención de doctrina anidadizada con una consulta  ( Fetching doctrine nested set with one query ) 
Estoy buscando una manera de buscar un conjunto anidado en una consulta de DB. refs/pulls/1/merge7 Entonces, en total obtengo tantas consultas como cate...

1  Disparadores: lista de adyacencia a un conjunto anidado  ( Triggers adjacency list to a nested set ) 
Tengo una lista de adyacencia en un sistema heredado que me gustaría consultar recursivamente (necesidad de obtener subtotales, etc.). ¿Puedo hacer un gatil...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos