2014-06-09 12 views
7

Come includere un figlio di un'istituzione figlio?Come includere() un'entità figlio nidificata in linq

Vale a dire, posti di lavoro sono citazioni che hanno QuoteItems

var job = db.Jobs 
      .Where(x => x.JobID == id) 
      .Include(x => x.Quotes) 
      .Include(x => x.Quotes.QuoteItems) // This doesn't work 
      .SingleOrDefault(); 

Giusto per essere chiari - Sto cercando di recuperare un singolo elemento di lavoro, ed è associato Quotes (uno a molti) e per ciascuna Quota The Associated QuoteItems (Un preventivo può avere molti QuoteItems)

Il motivo per cui lo sto chiedendo è perché nella mia vista Indice preventivo sto cercando di mostrare il totale di tutti gli elementi di preventivo per ogni offerta SUMMando il totale parziale, ma sta arrivando come 0. Sto chiamando il totale parziale come questo:

@item.QuoteItem.Sum(p => p.Subtotal) 

Credo che la ragione per cui ho questo problema è che la mia query di Linq sopra non sta recuperando i QuoteItem associati per ogni Quote.

+0

probabilmente hai ottenuto il compilatore o l'errore di sintassi giusto? –

+0

Sì, sono abbastanza sicuro che non è la sintassi, volevo solo dimostrare cosa stavo dopo – Evonet

+0

Ti sei perso un tag 'entityframework' btw? – flindeberg

risposta

17

per ottenere un lavoro e il carico desiderosi tutte le sue citazioni e le loro quoteitems, si scrive:

var job = db.Jobs 
     .Include(x => x.Quotes.Select(q => q.QuoteItems)) 
     .Where(x => x.JobID == id) 
     .SingleOrDefault(); 

potrebbe essere necessario SelectMany invece di Select se QuoteItems è anche una raccolta.

Nota agli altri; Il metodo Include() fortemente tipizzato è un metodo di estensione quindi è necessario includere using System.Data.Entity; nella parte superiore del file.

+0

Questo ha fatto il trucco, grazie – Evonet

6

Questo farà il lavoro (dato che stiamo parlando Entity Framework e si desidera andare a prendere i bambini-entità):

var job = db.Jobs 
      .Include(x => x.Quotes) // include the "Job.Quotes" relation and data 
      .Include("Quotes.QuoteItems") // include the "Job.Quotes.QuoteItems" relation with data 
      .Where(x => x.JobID == id) // going on the original Job.JobID 
      .SingleOrDefault(); // fetches the first hit from db. 

Per ulteriori informazioni sull'istruzione Include dare un'occhiata a questo: http://msdn.microsoft.com/en-us/library/bb738708(v=vs.110).aspx

+0

hai provato a utilizzare. Includi dopo la clausola where? –

+0

Questa è una risposta piuttosto bizzarra. –

+0

@DanielKelley Eh? ObjectQuery? È il modo in cui lo fai tristemente. – flindeberg

2

Questo ha fatto il trucco per me come ha detto @flindeberg qui. Appena aggiunto controllando se ci sono bambini in ciascun elemento padre nell'elenco

List<WCF.DAL.Company> companies = dbCtx.Companies.Where(x=>x.CompanyBranches.Count > 0) 
          .Include(c => c.CompanyBranches) 
          .Include("CompanyBranches.Address") 
          .ToList(); 
Problemi correlati