2017-09-22 20 views
-2

私はデータのセットが2つあります:trainedOfficersofficersToTrainです。これらのデータセットは共通してClubIdを共有します。 がofficersToTrainに表示されないようにしようとしていますので、右外部結合を実行します。この画像を見て:linqを使用して右ジョイン外部結合を実行する方法

enter image description here

  • A = trainedOfficers
  • B = officersToTrain

私は、次のクエリを実行しようとしたが、それは何の結果が得られません。

正しい外部結合を取得するにはどうすればよいですか。

答えて

1
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つのフィールドをキーオフするだけです。

+0

完全に最後の段落に同意します。これは貧弱な設計です。 –

関連する問題