gpt4 book ai didi

c# - .NET Linq 左连接

转载 作者:太空狗 更新时间:2023-10-30 00:36:51 32 4
gpt4 key购买 nike

我在 SQL 中有 2 个表:

Table 1 
Step Id
Step Name

Table 2
Profile Id
Step Id
Completed

即使表 2 中没有匹配项,我也想返回以下结果:

Results
Table1.Step Id
Table1.Step Name
Table2.Profile Id
Table2.Completed

我在 SQL 中执行此操作的方式如下:

select * from [Table 1] t1
left join [Table 2] t2
on t1.Step Id = t2.Step Id

这会产生我期望的结果。

当我将其翻译成 linq 时:

public static List<UserCompletion> GetStepCompletion(string category, string profileid) { 

List<Step> step = GetSteps(category);
List<UserStep> userStep = GetUserSteps(category, profileId);

var q = from s in step
join us in userStep
on s.Id equals us.StepId
select new UserCompletion
{
StepId = s.Id,
Headline = s.StepName,
ProfileId = us.ProfileId
Completed= us.Completed
};

return q.ToList();

}

它可以工作,但像 JOIN 而不是 left join。我只得到匹配的结果。

此外,UserCompletion 是我从此方法返回的一个对象。

最佳答案

您也可以试试这个(假设 us.Completed 是 bool 值):

var q = from s in step
let us = (from i in userStep where s.Id = i.StepId).SingleOrDefault()
select new UserCompletion
{
StepId = s.Id,
Headline = s.StepName,
ProfileId = us.ProfileId
Completed = us == null ? false : us.Completed
};

这不会变成 sql 中的连接,而是像这样的嵌套 select 语句:

select 
StepId, Headline, ProfileId,
isnull((select top(1) Completed from userStep where StepId = Id), 0) as Completed
from step

关于c# - .NET Linq 左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/619292/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com