C# 如何使用linq执行右连接外部连接
我有两组数据:C# 如何使用linq执行右连接外部连接,c#,linq,outer-join,right-join,C#,Linq,Outer Join,Right Join,我有两组数据:trainedOffices和OfficesToTrain。这些数据集共享一个ClubId。我正在尝试确保trainedOfficers不会出现在OfficesToTrain中,因此我希望执行右外部联接。看看这张图片: A=受过培训的官员 B=公务员培训 我尝试过执行以下查询,但没有结果 public void SetTrainedClubOfficers(ILookup<ClubID, ClubOfficerAuthority> clubsAuthorityLo
trainedOffices
和OfficesToTrain
。这些数据集共享一个ClubId
。我正在尝试确保trainedOfficers
不会出现在OfficesToTrain
中,因此我希望执行右外部联接。看看这张图片:
- A=受过培训的官员
- B=公务员培训
public void SetTrainedClubOfficers(ILookup<ClubID, ClubOfficerAuthority> clubsAuthorityLookup)
{
var clubIds = clubsAuthorityLookup.Select(x => x.Key);
var trainedOfficers = GetTrainedClubOfficers(clubIds.ToArray());
var clubsToTrain = from trainedOfficer in trainedOfficers
join officer in clubsAuthorityLookup
on trainedOfficer.Key equals officer.Key into joined
from officer in joined.DefaultIfEmpty()
select new
{
ClubId = officer.Key,
Officers = officer.Select(club => club)
};
}
public void SetTrainedClubOfficers(ILookup ClubAuthorityLookup)
{
var clubIds=clubauthoritylookup.Select(x=>x.Key);
var trainedOfficers=GetTrainedClubOfficers(clubIds.ToArray());
var CLUBSTORAIN=来自培训办事处中的培训办事处
加入ClubAuthorityLookup中的官员
接受培训的官员。钥匙等于官员。钥匙进入
来自joined.DefaultIfEmpty()中的官员
选择新的
{
ClubId=警官,钥匙,
军官=军官。选择(俱乐部=>俱乐部)
};
}
如何获得正确的外部联接?公共void SetTrainedClubOfficers(ILookup ClubAuthorityLookup)
public void SetTrainedClubOfficers(ILookup<ClubID, ClubOfficerAuthority> clubsAuthorityLookup)
{
var clubIds = clubsAuthorityLookup.Select(x => x.Key);
var trainedOfficers = GetTrainedClubOfficers(clubIds.ToArray());
var clubsToTrain = from trainedOfficer in trainedOfficers
join officer in clubsAuthorityLookup
on trainedOfficer.Key equals officer.Key into joined
from j in joined.DefaultIfEmpty()
select new
{
ClubId = j.Key,
Officers = officer.Select(club => club)
};
}
{
var clubIds=clubauthoritylookup.Select(x=>x.Key);
var trainedOfficers=GetTrainedClubOfficers(clubIds.ToArray());
var CLUBSTORAIN=来自培训办事处中的培训办事处
加入ClubAuthorityLookup中的官员
接受培训的官员。钥匙等于官员。钥匙进入
来自joined.DefaultIfEmpty()中的j
选择新的
{
ClubId=j.Key,
军官=军官。选择(俱乐部=>俱乐部)
};
}
这是没有测试,但我认为它应该工作。你不止一次使用过警官
编辑:
不知道为什么你需要两张桌子。你可以在警官表中有一个标记为“已训练”的字段。然后,为了显示谁受过训练,你可以只键入一个字段。完全同意最后一段。这是一个糟糕的设计。