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.

C# Linq DefaultIfEmpty LeftJoin C# Linq DefaultIfEmpty se refiere a la función que se utiliza en Linq para devolver un conjunto de datos predeterminado si el conjunto actual de datos está vacío. LeftJoin se refiere a la operación de unión en la que se devuelven todos los elementos del conjunto de datos de la izquierda y solo los elementos coincidentes del conjunto de datos de la derecha. Si no hay coincidencias, se devuelve el valor predeterminado (null) para los elementos de la derecha.

Algunos agentes tienen null en el campo Grupo. Estoy tratando de hacer LeftJoin, pero recibo un resultado como InnerJoin (solo agentes con Group no nulo). ¿Cuál es el problema?

Gracias a todos, encontré la respuesta en https://stackoverflow.com/a/21584913/13618303

Grupos = nueva ObservableCollection(esperar _repository.GetGroupsAsync() ?? nuevo Group[] { });
Agentes = nueva ObservableCollection(esperar _repository.GetAgentsAsync() ?? nuevo Agent[] { });
AgentesGrupos = new ObservableCollection(Agentes.GroupJoin(Grupos, a => a.Group, g => g.ID, (a, g) =>
new { Agente = a, Grupo = g})
.SelectMany(ag => ag.Grupo.DefaultIfEmpty(), (a,g) => new { Agente = a.Agente, Grupo = g })
.Select(ag => new { ID = ag.Agente.ID, NombreAgente = ag.Agente.AgentName, Login = ag.Agente.Login, IDAgente = ag.Agente.AgentID, EsBorrado = ag.Agente.IsDel, Grupo = ag.Grupo == null ? “Empty” : $”{ag.Grupo.NameGroup} ({ag.Grupo.Num})” }));

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema es que el código original utiliza un Join regular en lugar de un LeftJoin. Esto significa que solo se incluirán en el resultado los Agentes con un Grupo no nulo. Para realizar un LeftJoin, el código debería usar un GroupJoin en su lugar. Además, se debe utilizar la función SelectMany para aplanar las listas anidadas resultantes, y se debe usar la función DefaultIfEmpty para manejar los casos en los que un Agente tiene un Grupo nulo. Por último, el objeto dinámico debe ser reemplazado por un nuevo objeto anónimo que incluya tanto la información del Agente como del Grupo.

Comments are closed.