2011-01-20 1 views
25

È un codice funzionante;Include più livelli in CodeFirst - EntityFrameWork

IQueryable<Product> productQuery = ctx.Set<Product>().Where(p => p.Id == id).(Include"Contexts.AdditionalProperties.Field"); 

Ma si sa che non potrebbe produrre compilazione errore di tempo se abbiamo fatto errori nella dichiarazione stringa "Contexts.AdditionalProperties.Field"

vorrei scrivere codice qui sotto;

IQueryable<Product> productQuery = ctx.Set<Product>().Where(p => p.Id == id).Include(p => p.Contexts); 

Tuttavia, l'istruzione precedente non ha potuto dare la possibilità di definire AdditionalProperties e Field.

Cosa dovremmo fare?

Vorrei scrivere come più di una inclusione per la query di compilazione.

Grazie.

risposta

43

Se AdditionalProperties è un solo riferimento a un altro oggetto:

using System.Data.Entity; 
... 
IQueryable<Product> productQuery = ctx.Set<Product>() 
     .Include(p => p.Contexts.AdditionalProperties.Field) 
     .Where(p => p.Id == id); 


Se AdditionalProperties è una raccolta, allora è possibile utilizzare il Seleziona metodo:

IQueryable<Product> productQuery = ctx.Set<Product>() 
     .Include(p => p.Contexts.AdditionalProperties.Select(a => a.Field)) 
     .Where(p => p.Id == id); 

Don dimentica di importare System.Data.Enti ty namespace nel file di classe!

+1

Mi hai battuto;) –

+0

Devo dirti che non era * un * gioco leale ... Dal momento che ho risposto a questa domanda alcuni mesi fa qui. Scusa amico! –

+0

Grazie per la risposta veloce! Come posso aggiungere un altro oggetto in cui è contenuta la proprietà AdditionalProperties che è un oggetto di tipo <>? –