提问者:小点点

有什么方法可以优化我的linq查询以减少数据库调用吗?


因此,我有一个场景,我有一个机会表,其中有客户参考和客户ID。和对ProjectManager的表有引用的Customer表。现在,我有了opportunityId,使用该id我需要获取项目经理的信息。下面是我的工作代码,

public async Task<Object> GetProjectManagerIdAgainstCustomer(int? opportunityId)
        {
            var customerId = await _context.Opportunities.Where(Opportunity => Opportunity.Id == opportunityId).Include(Opp => Opp.Customer).Select(Opp=>Opp.CustomerId).FirstOrDefaultAsync();
            var ProjectManager = await _context.Customers.Where(Customer => Customer.Id == customerId).Include(Customer => Customer.ProjectManager).Select(x => new {
                email = x.ProjectManager.ProjectManagerEmail,
                fullname = x.ProjectManager.ProjectManagerName,
            }).FirstOrDefaultAsync();
            return (ProjectManager);
        }

现在,我的一个问题是,这两个查询对数据库进行了两次访问,这就把我带到了问题的主要目的,如何优化它,使所有这些都能在一次访问中完成,如果你们能在这段代码中找到任何其他问题,那就太好了?另外,有任何相关的文档也会有很大的帮助。其次,是否有任何方法可以在附加的Customer对象中获取ProjectManager对象,例如。通过使用include?


共1个答案

匿名用户

看起来您正在寻找一个连接操作。试一下这里的说明:https://docs.microsoft.com/en-us/dotnet/cssharp/linq/perform-inner-joins

使用它,您可以创建一个联接查询,该查询将在数据库上执行,并且您将只接收最终输出。