Ho preso il controllo di qualche codice di entità framework e sto cercando di refactoring. Prima di farlo, vorrei verificare se i miei pensieri sono corretti e non mi manca il modo di fare le cose a livello di entità.Refactoring livello dati
Esempio 1 - Subquery vs Registrati
qui abbiamo un uno-a-molti tra As e breakfast. A parte il codice che segue è difficile da leggere, è anche inefficiente?
from a in dataContext.As
where ((from b in dataContext.Bs
where b.Text.StartsWith(searchText)
select b.AId).Distinct()).Contains(a.Id)
select a
Sarebbe meglio, ad esempio, utilizzare il join e fare qualcosa del genere?
from a in dataContext.As
where a.Bs.Any(b => b.Text.StartsWith(searchText))
select a
Esempio 2 - esplicita unisce vs navigazione
Qui abbiamo un uno-a-molti tra As e B e un uno-a-molti tra B e Cs.
from a in dataContext.As
join b in dataContext.Bs on b.AId equals a.Id
join c in dataContext.Cs on c.BId equals b.Id
where c.SomeValue equals searchValue
select a
C'è una buona ragione per utilizzare join espliciti piuttosto che navigare nel modello di dati? Per esempio:
from a in dataContext.As
where a.Bs.Any(b => b.Cs.Any(c => c.SomeValue == searchValue)
select a
Grazie per aver trovato il tempo di rispondere. – Joey