因此,我有一个场景,我有一个机会表,其中有客户参考和客户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?
看起来您正在寻找一个连接操作。试一下这里的说明:https://docs.microsoft.com/en-us/dotnet/cssharp/linq/perform-inner-joins
使用它,您可以创建一个联接查询,该查询将在数据库上执行,并且您将只接收最终输出。