Как я могу оптимизировать мой запрос LINQ? - PullRequest
0 голосов
/ 25 августа 2018

Я написал следующий запрос LINQ, чтобы вернуть список групп, а затем повторил список отдельно.

Мне нужен только список групп пользователей с указанным адресом электронной почты.

Я уверен, что это может быть не сразу.

Могу ли я переписать его лучше (с точки зрения производительности)?

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
}

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Если вам нужны только CustomerGroup сущности со связанной сущностью Group (как я понимаю из вашего пояснения в разделе комментариев), неэффективно извлекать другие связанные сущности ( User и Заказчик ). Вы можете сделать так, чтобы EF выбирал только те объекты, которые вас интересуют, вот так:

var groups = 
(
    from user in _context.Users
    from customerGroup in user.Customer.CustomerGroups
    where user.Email == email
    select customerGroup
).Include(cg => cg.Group);

Или когда CustomerGroup не хранит соответствующих данных, только отношения:

var groups = 
(
    from user in _context.Users
    from customerGroup in user.Customer.CustomerGroups
    where user.Email == email
    select customerGroup.Group
);
0 голосов
/ 25 августа 2018

Попробуйте:

То есть сделать запрос к таблице CustomerGroups, поэтому вам не нужно включать Customer и 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();

или

  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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...