80 messaggi dal 17 maggio 2011
Ciao a tutti,

Non riesco proprio a capire come limitare l'include in una semplice query linq.
            Plant newPlant = db.Plants
                               .Include(x => x.Instruments)
                               .Where(x => x.Id == id)


Vorrei limitare l'include con questa clausula Instruments.Where(f => f.DateTimeRemoval == null)

Ciao e Grazie
Paolo
Modificato da fractals87 il 16 dicembre 2019 16:17 -
80 messaggi dal 17 maggio 2011
Ho scoperto che usando le proiezioni ottengo ciò che voglio :

            var test = db.Plants.Include(x => x.Instruments).Where(w=>w.Id ==2 )
                   .Select(p => new {
                       Plants = p,
                       Instruments = p.Instruments.Where(i => i.DateTimeRemoval == null)
                   })
                   .AsEnumerable()
                   .Select(cp => cp.Plants).ToList();


Già non capisco il fatto che serva .AsEnumerable, se lo rimuovo la query mi restituisce solo il plant.
Il problema che io dovrei ottenere anche una sotto proprietà di navigazione di instruments.
Che nel seguente modo ottengo senza limitare Instruments
            Plant newPlant = db.Plants.AsNoTracking()
                               .Include(x => x.Instruments)
                               .Include("Instruments.ParameterInstruments")
80 messaggi dal 17 maggio 2011
il problema è come :
            var test = db.Plants
                               .Include(x => x.Instruments.Any(f => f.DateTimeRemoval == null))
                               .Where(x => x.Id == id).ToList();



ottengo :

System.ArgumentException: 'L'espressione del percorso Include deve fare riferimento a una proprietà di navigazione definita nel tipo. Utilizzare i percorsi a più punti per le proprietà di navigazione dei riferimenti e l'operatore Select per le proprietà di navigazione della raccolta.

Con include microsoft dice che non è possibile

"https://docs.microsoft.com/en-us/ef/ef6/querying/related-data

It is not currently possible to filter which related entities are loaded. Include will always bring in all related entities."
427 messaggi dal 13 novembre 2009
Toglie include e metti any nella where. In include non ci puoi mettere che i nomi tabella
944 messaggi dal 11 febbraio 2013
Ti suggerisco di installare LINQPad https://www.linqpad.net/
mi ha aiutato molto
427 messaggi dal 13 novembre 2009
var test = db.Plants.Include("Instruments"))
.Where(x => x.Id == id & x.Instruments.Any(i => i.DateTimeRemoval == null)).ToList();

prendi tutt i Plants i cui Instruments hanno DateTimeRemoval == null ed includi nel risultato Instruments

F.
Modificato da flaviovb il 18 dicembre 2019 10:33 -
80 messaggi dal 17 maggio 2011
jjchuck ha scritto:
Ti suggerisco di installare LINQPad https://www.linqpad.net/
mi ha aiutato molto


Non fornisce la traduzione da sql a linq

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.