Ho un database con queste due tabelle: Customer
e CustomerStatus
. CustomerStatus
è una cosiddetta tabella readonly. Tutte le modifiche allo stato di un cliente danno come risultato INSERT in quella tabella. Lo stato attuale del cliente è individuabile tramite CustomerStatus.StatusTimestamp
.Come includere una riga specifica da un'altra tabella con LINQ alle entità
Ora sto cercando una query LINQ su entità che carichi tutti i clienti insieme al loro stato corrente. Qualcosa come
.Include("CustomerStatus.OrderByDescending(StatusTimestamp).FirstOrDefault()")
.
Non ho trovato un modo corretto con EF 4.0.
mia soluzione attuale è molto brutto e utilizza 2 fasi:
passo 1: query LINQ che carica tutto lo stato (nel livello aziendale/dati):
var r = from c in db.Customers.Include("CustomerStatus") select c;
fase 2: prendere lo stato adatto da ciascun cliente nella GUI (in un ciclo in una vista MVC3):
c.CustomerStatus.OrderByDescending(i => i.StatusTimestamp).FirstOrDefault()
Qualche idea su come ciò possa essere fatto direttamente in un solo passaggio?
Funziona bene. Grazie! Attualmente lo faccio ancora in 3 passaggi, ma tutti nella BLL ora: 1: 'var q = ...'. 2: 'var l = q.ToList()' (per forzare il caricamento a vuoto dello stato). 3: 'return l.Select (i => i.Customer)' (per restituire ancora un IEnumerable e non un tipo anonimo). –
mkva