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)
};
}
これはテストされていませんが、動作するはずです。あなたは役員を複数回使用していました。
編集: なぜこのために2つのテーブルが必要かわかりません。 Officersテーブルに「IsTrained」というフラグを立てるフィールドがあります。それでは、訓練された人と訓練されていない人を表示するには、その1つのフィールドをキーオフするだけです。
完全に最後の段落に同意します。これは貧弱な設計です。 –