2017-08-23 20 views
0

ほとんどのクエリを実行している問題が発生しています。私は一度に1つの関連エンティティへの結合でリンククエリを生成することができます。しかし、以下の例のように複数の結合でLINQクエリを実行すると、「シーケンスに要素が含まれていません」というエラーが表示されます。Dynamics 365 OrganizationServiceContext Linq複数の結合を使用したクエリ

var query = 
(
    from permission in context.CreateQuery<ServiceModel.Types.idoe_permission>() 
     join contact in context.CreateQuery<ServiceModel.Types.Contact>() 
      on permission.idoe_contact_idoe_permission.Id equals contact.Id 
     join corporation in context.CreateQuery<ServiceModel.Types.idoe_corporation>() 
      on permission.idoe_idoe_corporation_idoe_permission.Id equals corporation.Id 
     join role in context.CreateQuery<ServiceModel.Types.idoe_role>() 
      on permission.idoe_idoe_role_idoe_permission.Id equals role.Id 
    where contact.idoe_ADB2CID == request.UserId 
    select new { Corporation = corporation, Role = role } 
).ToList(); 

私は一度に1つのエンティティに「参加」することができます。私が見た他の例では、複数の結合が可能ですが、これを動作させることはできませんでした。

提案がありますか?

+0

疑問の質問 - これは結果を返すはずですか?このクエリに一致するレコードがない可能性がありますか?私は(高度な検索を使用して)FetchXMLクエリを構築し、あなたが望む値を返すかどうかを確認することをお勧めします。また、Aronの答えのように参照名を使用する必要があります。これははるかに明確になります –

答えて

1

ジョインのルックアップフィールド名ではなく、リレーションシップ名を使用しているようです。ルックアップフィールド名を代わりに使用すると、次のようになることがあります。

var query = (from permission in context.CreateQuery<ServiceModel.Types.idoe_permission>() 
     join contact in context.CreateQuery<ServiceModel.Types.Contact>() on permission.idoe_contactid.Id equals contact.Id 
     join corporation in context.CreateQuery<ServiceModel.Types.idoe_corporation>() on permission.idoe_corporationid.Id equals corporation.Id 
     join role in context.CreateQuery<ServiceModel.Types.idoe_role>() on permission.idoe_roleid.Id equals role.Id 
     where contact.idoe_ADB2CID == request.UserId 
     select new { Corporation = corporation, Role = role }).ToList() ; 
関連する問題