C# 实体框架使用左连接lambda加载数据
我想从一个特定的id加载包含lambda详细信息的列表 我使用以下代码进行了尝试:C# 实体框架使用左连接lambda加载数据,c#,entity-framework,linq,asp.net-core,.net-core,C#,Entity Framework,Linq,Asp.net Core,.net Core,我想从一个特定的id加载包含lambda详细信息的列表 我使用以下代码进行了尝试: // Load User Visitor list var list = await Context.UserVisitors .Where(s => s.UserId.Equals(userOwner.Id)) .Select(s => s.UserVisitorId)
// Load User Visitor list
var list = await Context.UserVisitors
.Where(s => s.UserId.Equals(userOwner.Id))
.Select(s => s.UserVisitorId)
.ToListAsync();
foreach (var t in list)
{
UserOwnerVisitors.Add(await Context.User
.Include(u => u.Details)
.Include(u => u.Settings)
.FirstAsync(u => u.Id.Equals(t)));
}
代码可以工作,但效率不高。我怎样才能在一个请求中完成这件事
提前谢谢。我有点瞎,因为我不知道你的模型的所有关系,但下面你可以找到我认为是你的模型,如果你编辑你的问题,我也许可以给你一个准确的答案:
var UserOwnerVisitorsList = from uv in Context.UserVisitors
join u in Context.User
on uv.UserId equals u.Id
join det in Context.Details
on det.UserId equals u.Id
join set in Context.Settings
on set.UserId equals u.UserId
where uv.UserId == userOwner.Id
select u;
我有点盲目,因为我不知道你的模型的所有关系,但下面你可以找到我认为是你的模型,如果你编辑你的问题,我也许可以给你一个确切的答案:
var UserOwnerVisitorsList = from uv in Context.UserVisitors
join u in Context.User
on uv.UserId equals u.Id
join det in Context.Details
on det.UserId equals u.Id
join set in Context.Settings
on set.UserId equals u.UserId
where uv.UserId == userOwner.Id
select u;
为什么你有两个“等待”?您只需要一个。在第一个wait方法中,im获取用户的所有ID。之后,我将用户数据(如设置、详细信息)加载到列表中。我想把它作为一个数据库查询和一个等待。当前我正在使用丑陋的foreach查询数据。@TimoFalter在最后一行中有一种删除foreach的方法,类似这样:……FirstAsync(u=>list.Contains(u.Id)。这将删除您的foreach。但是,如果您真的要对数据库进行一次查询,则需要通过执行联接操作Linq@Bruno是的,没错。我需要一个联接操作,这就是我创建此问题的原因。我如何才能做到这一点?为什么有两个“等待”?您只需要一个。在第一个等待方法中,我获取用户的所有ID。然后,我将用户数据(如设置、详细信息)加载到一个列表中。我想将其作为一个数据库查询,一个等待。目前,我使用一个丑陋的foreach来查询数据。@TimoFalter有一种方法可以删除您的foreach,类似于这样,在e最后一行:…..FirstAsync(u=>list.Contains(u.Id))。这将删除您的foreach。但是,如果您真的要对数据库进行一次查询,则需要通过执行连接操作Linq@Bruno是的,没错。我需要一个联接操作,这就是我创建此问题的原因。我如何才能做到这一点?