2012-05-02 12 views
3

LINQを使用してDynamics CRM 2011からデータを取得しようとしています。目標は、特定の日付以降に変更があった連絡先レコードをすべて、または同じ日付以降に変更された子エンティティ(PERCファイル)を持つことです。クエリは、次のようになります。Where-clauseのLINQ to CRM-OR

「コンタクト」の実体は、名前=「cga_statuschangedate」で属性が含まれていません:

// Bring all students who have changes (at Contact entity) after specific date 
// momentInTime or the status of any of their perc files has been changed since 
// that date 
var students = (from c in ContactSet 
       join pl in cga_portallogonSet on c.Id equals pl.cga_ContactId.Id 
       join ef in cga_percfileSet on c.Id equals ef.cga_StudentId.Id 
       where 
        (pl.cga_PortalLogonRole.Value == 284970000) // student 
       where 
        (c.ModifiedOn >= momentInTime || c.CreatedOn > momentInTime) 
        || 
        (ef.cga_statuschangedate >= momentInTime) 
       select c.cga_StudentNumber).Distinct().ToList(); 

これは、次のエラーメッセージを生成します。

私は2つの異なるエンティティでORを実行する方法を理解できません。句>は、エンティティの一つ以上に対して追加することができ、結果セットをフィルタリングするために

:MSDNを使用すると、各エンティティのWHERE句を必要と述べています。各where句には、個々のエンティティタイプに対する条件しか含めることができません。 >複数のエンティティを含む複合条件は無効です。代わりに、各エンティティ>は別々のwhere節でフィルタリングされるべきです。

http://msdn.microsoft.com/en-us/library/ff681565.aspx

何が必要達成するための別の方法はありますか?

答えて

5

残念ながら、使用しているliunqプロバイダがfetchXMLに変わり、使用しているシナリオをfetchXMLがサポートしていないため、単一のlinq文では達成できません。

詳細...フェッチは、あなたに状態のエンティティまたはリンクエンティティの内部を与えます。これらの条件要素は、他のリンクされたエンティティからの属性、直接の親エンティティまたはリンクエンティティのみの属性を持つことはできません。 Here is one of many microsoft forum posts referencing this limitation of fetchXML

おそらくあなたが探していた答えではないでしょうか?醜い選択肢として、あなたは2つの別々のクエリを実行し、メモリにフィルタをかけることができます(パフォーマンスに有害なものとして)。また、オンプレミスのデプロイメントの場合は、フィルタ処理されたビューに対してSQLを記述することもできます。がんばろう。