Estoy tratando de implementar una consulta en LINQ que usa una combinación externa izquierda con varias condiciones en la cláusula ON.LINQ Únase con varias condiciones en la cláusula On
Voy a usar el ejemplo de las dos tablas siguientes Proyecto (Proyectólo, Nombre del Proyecto) y el Grupo de (TaskID, projectId, taskName, Completado). Quiero ver la lista completa de todos los proyectos con sus respectivas tareas, pero solo aquellas tareas que se completan.
No puedo usar un filtro para Completed == true
porque eso filtrará cualquier proyecto que no tenga tareas completadas. En su lugar, deseo agregar Completed == true
a la cláusula ON de la unión para que se muestre la lista completa de proyectos, pero solo se mostrarán las tareas completadas. Los proyectos sin tareas completadas mostrarán una sola fila con un valor nulo para Tarea.
Aquí está la base de la consulta.
from t1 in Projects
join t2 in Tasks
on new { t1.ProjectID} equals new { t2.ProjectID } into j1
from j2 in j1.DefaultIfEmpty()
select new { t1.ProjectName, t2.TaskName }
¿Cómo agrego && t2.Completed == true
a la cláusula on?
Parece que no puedo encontrar ninguna documentación de LINQ sobre cómo hacer esto.
Eso parece ser una manera no obvia de hacerlo. No estoy seguro de entender lo que se supone que debe hacer. – svick
@svick: el uso de tipos anónimos te permite unirte a múltiples criterios. Solo necesita asegurarse de que los nombres de las propiedades coincidan en ambos tipos. ¿No estás seguro de dónde viene la confusión? – Aducci
La confusión es que realmente tiene más sentido como dos igualdades unidas por 'y', no una igualdad de algún objeto" extraño ". Y para demostrar mi punto, tu código es incorrecto. Para que funcione, tendrías que tener 'true' en el lado izquierdo y' t2.Complete' en el derecho. – svick