Sto cercando di implementare una query in LINQ che utilizza un join esterno sinistro con più condizioni nella clausola ON.LINQ Join con condizioni multiple nella clausola on
Userò l'esempio dei due seguenti tabelle Progetto (ProjectID, ProjectName) e Task (TaskID, ProjectID, TaskName, completato). Voglio vedere l'elenco completo di tutti i progetti con le rispettive attività, ma solo quelle che sono state completate.
Non riesco a utilizzare un filtro per Completed == true
perché questo escluderà tutti i progetti che non hanno attività completate. Invece voglio aggiungere Completed == true
alla clausola ON del join in modo che venga mostrato l'elenco completo dei progetti, ma verranno mostrate solo le attività completate. I progetti senza attività completate mostreranno una singola riga con un valore nullo per l'attività.
Ecco le basi della query.
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 }
Come aggiungere && t2.Completed == true
alla clausola on?
Non riesco a trovare alcuna documentazione LINQ su come eseguire questa operazione.
che sembra un modo non ovvio per farlo. Non sono sicuro che capirò cosa si suppone di fare. – svick
@svick: l'utilizzo di tipi anonimi consente di aderire su più criteri. Devi solo assicurarti che i nomi delle proprietà corrispondano su entrambi i tipi. Non sai da dove viene la confusione? – Aducci
La confusione è che ha davvero più senso come due uguaglianze unite da 'and', non un'eguaglianza di qualche oggetto" strano ". E per dimostrare il mio punto, il tuo codice è sbagliato. Perché funzioni, dovresti avere 'true' sul lato sinistro e' t2.Complete' sulla destra. – svick