Ho scritto la seguente query LINQ per restituire l'elenco dei gruppi e quindi l'elenco iterativo separatamente.
Ho solo bisogno di un elenco di gruppi di utenti con email specifiche.
Sono sicuro che questo potrebbe non essere il giusto.
Posso riscriverlo in un modo migliore (prestazioni-saggio)?
var groups = _context.Users.Where(m => m.Email == email)
.Include(g => g.Customer)
.ThenInclude(r => r.CustomerGroups)
.ThenInclude(t => t.Group)
.First().Customer.CustomerGroups;
foreach (var group in groups)
{
var s = group.Group;
//do something
}
Se sono necessarie solo entità Gruppo Cliente con la relativa entità di Gruppo (poiché interpreto i chiarimenti nella sezione commenti) è inefficiente recuperare altre entità correlate ( Utente e Cliente ). Puoi fare in modo che EF recuperi solo le entità che ti interessano in questo modo:
var groups =
(
from user in _context.Users
from customerGroup in user.Customer.CustomerGroups
where user.Email == email
select customerGroup
).Include(cg => cg.Group);
Oppure quando CustomerGroup non memorizza dati rilevanti, solo relazioni:
var groups =
(
from user in _context.Users
from customerGroup in user.Customer.CustomerGroups
where user.Email == email
select customerGroup.Group
);
Prova questo :
Si tratta di effettuare query sulla tabella CustomerGroups
modo che non sia necessario Includi Customer
e gruppi di CustomerGroups
.
var customerGroups = _context.CustomerGroups.Where(m => m.Customer.User.Email == email)
.Include(t => t.Group).
Select(s=> new CustomerGroupModel {
A= s.A,
B= s.B,
…
Group = s.Group
}).ToList();
O
var customerGroups = _context.Customer.Where(m => m.User.Email == email)
.Include(r => r.CustomerGroups).ThenInclude(t => t.Group).
Select(s=> new CustomerGroupModel {
A= s.CustomerGroups.A,
B= s.CustomerGroups.B,
…
Group = s.CustomerGroups.Group
}).ToList();