Include di 3 tabelle con EF6 database first

di il
2 risposte

Include di 3 tabelle con EF6 database first

Gentili,
sto lavorando ad un progetto che utilizza EF6 (non core) database first con un modello edmx creato mediante il wizard Ado Entity Model => EF designer da database.
Ho tre tabelle prenotazioni - prenotazioni_clienti - clienti collegate da associazioni.
Usando questa estensione ThenInclude riesco a fare la seguente query:

var boh = dbCtx.Prenotazioni
            .Include(pc => pc.Prenotazioni_Clienti)
            .ThenInclude(c => c.Clienti)
            .Where(p => p.Stato == 2).ToList();     // prenotazioni.Stato == 2
per estrarre solo le prenotazioni con stato 2, però avrei bisogno anche di filtrare per la tabella Prenotazioni_Clienti.Cure == 1 (true).
In pratica devo filtrare solo i clienti che hanno una prenotazione in stato aperto (che trovo nella tabella prenotazioni) e con cura collegata (che trovo nella tabella prenotazioni_clienti).
Non riesco ad aggiungere il secondo Where: è possibile secondo voi , o devo seguire qualche altro passaggio?
Avete eventualmente qualche link disponibile?
Grazie mille per la disponibilità.
Lucius

2 Risposte

  • Re: Include di 3 tabelle con EF6 database first

    Ciao Lucius,
    prova in questo modo

    var boh = (from preno in dbCtx.Prenotazioni
    join prenClienti in dbCtx.Prenotazioni_Clienti on preno.ID equals prenClienti.ID
    join clie in dbCtx.Clienti on prenClienti.id equals clie.id
    where preno.stato == 2 && prenClienti.Cure == 1
    select new {
    Campo = preno.id,
    campo2 = prenClienti.testo,
    campo3 =clie.Title
    });

    Naturalmente devi modificare i campi chiavi come sono quelli da DB.
    Ma prendi spunto da questa join di Entity Framework.
    Ciao e buona programmazione.
  • Re: Include di 3 tabelle con EF6 database first

    luciusinfabula ha scritto:


    per estrarre solo le prenotazioni con stato 2, però avrei bisogno anche di filtrare per la tabella Prenotazioni_Clienti.Cure == 1 (true).
    Dovrebbe bastare questo:
    
    var boh = dbCtx.Prenotazioni
                .Include(p => p.Prenotazioni_Clienti)
                .ThenInclude(p => p.Clienti)
                .Where(p => p.Stato == 2) // prenotazioni.Stato == 2
                .Where(p => p.Prenotazioni_Clienti.Any(pc => pc.Cure == 1))
                .ToList();     
    
    Non ho potuto verificare ovviamente la query nella pratica, sia sintatticamente che funzionalmente.

    Ciao!
Devi accedere o registrarti per scrivere nel forum
2 risposte