La configurazione che segue è vero:LINQ to Entity Framework: selezionare con un solo sottoinsieme di elementi figlio
- A è classe genitore
- A ha uno a molti di B
A ha uno a molti di C
B ha uno a molti di X
C ha sulla e per molti di X
X ha una proprietà chiamata DataFine: questo è i criteri di filtro
voglio recuperare un set che ha A, B, C e X (ABX e ACX Voglio filtrare il set in modo che vengano restituiti solo gli elementi che hanno X.EndDate = Date
.
I non desidera elementi di X che non soddisfano questo criterio. Questo può essere fatto in un singolo Seleziona?
Attualmente sto cercando seguente codice:
var set = _context.Set<A>()
.Include("B.X")
.Include("C.X")
.Where(a => a.B.Any(b => b.X.Any(x => x.EndDate == date)) ||
a.C.Any(c => c.X.Any(x => x.EndDate == date)))
.ToList();
Tuttavia, quando B.X
è all'interno di criteri di filtro, includerà anche CX E quando uno dei B.X
(X possono essere molti) è vera per i criteri , tornerà tutto B.X
entità
ho fatto del mio meglio per fare un esempio:
A B X X.EndDate
A1 B1 BX1 2015-01-01
A1 B1 BX2 2015-01-02
A1 B2 BX3 2015-01-09
A C X X.EndDate
A1 C1 CX1 2015-01-03
A1 C1 CX2 2015-01-03
A1 C2 CX3 2015-01-02
When date == 2015-01-02
Results are:
A1 B1 BX1
BX2
B2 BX3
C1 CX1
CX2
C2 CX3
Desired results are:
A1 B1 BX2
C2 CX2
Nota: Posso solo utilizzare questa notazione e non la notazione SQL-like. Ci sono più entità che devono essere incluse e questo può (apparentemente) essere fatto solo da .Include ("") con le virgolette
Considerare la visualizzazione di un esempio di input, valori di output. –
@HosseinNarimaniRad Fatto :) – Recipe