es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Múltiples niveles con incluir no devolver todas las filas a menos que consulte el detalle.

Estoy utilizando .NET Core 2.0 (lo sé) y tengo datos anidados que estoy extrayendo de SQL.

Lo extraño es que algunos de los datos no se muestran a menos que los busque explícitamente.

var record = db.Records
               .Include(x => x.ParentLabels)
               .Include(x => x.TopChildren)
               .ThenInclude(x => x.LevelTwoChildren)
               .ThenInclude(x => x.LevelThreeChildren)
               .ThenInclude(x => x.LevelTwoChildren.LevelTwoLabels)
               .FirstOrDefault(x => x.Id.Equals(id));

Lo extraño es que algunos de los datos de “LevelTwoChildren.Labels” no se muestran, A MENOS QUE agregue lo siguiente:

var t = record.TopChildren.FirstOrDefault();
var tt = t.LevelTwoChildren.FirstOrDefault(x => x.Id.Equals(id2));

He intentado recorrer todos los niveles de registro usando un bucle “foreach”, pero eso no ayuda.

¿Alguna idea?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que los datos para algunas de las LevelTwoChildren.Labels no están siendo incluidos en la consulta inicial. Agregar el código adicional para buscarlo explícitamente es una solución provisional, pero no es ideal. Una posibilidad es que pueda haber alguna inconsistencia o problema con los propios datos en la base de datos. Otra posibilidad es que pueda haber alguna limitación o problema con la versión .NET Core 2.0 que esté causando la falta de datos. Actualizar a una versión más reciente de .NET Core podría ayudar a resolver este problema.

    Otro enfoque a intentar es modificar la consulta para usar el método Select en lugar de Include, e incluir explícitamente todos los campos que se necesitan. Esto podría ayudar a asegurar que todos los datos necesarios se estén recuperando:

    var record = db.Records
       .Select(r => new Record {
           Id = r.Id,
           ParentLabels = r.ParentLabels,
           TopChildren = r.TopChildren.Select(tc => new TopChild {
               Id = tc.Id,
               LevelTwoChildren = tc.LevelTwoChildren.Select(l2 => new LevelTwoChild {
                   Id = l2.Id,
                   LevelThreeChildren = l2.LevelThreeChildren,
                   LevelTwoLabels = l2.LevelTwoLabels
               }).ToList()
           }).ToList()
       })
       .FirstOrDefault(r => r.Id == id);
    

    Esta consulta recupera los campos necesarios utilizando el método Select y construye un nuevo objeto Record con todos los datos requeridos. Esto podría ser una forma más eficiente y confiable de recuperar los datos.

Comments are closed.