我编写了以下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
}

最佳答案

如果您只需要CustomerGroup实体和相关的Group实体(正如我在注释部分所解释的那样),则获取其他相关的实体(用户和客户)效率很低。您可以像这样使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
);

关于c# - 如何优化LINQ查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52016011/

10-11 16:44