3

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

// 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();

これにより、次のエラーメッセージが生成されます。

'Contact'エンティティにName='cga_statuschangedate'の属性が含まれていません。

2つの異なるエンティティでORを実行する方法がわかりません。MSDNによると、エンティティごとにWHERE句が必要です。

ここで条項

結果セットをフィルタリングするために、1つ以上のエンティティに対して句を追加できます。各where句には、個々のエンティティタイプに対する条件のみを含めることができます。>複数のエンティティを含む複合条件は無効です。代わりに、各エンティティは個別のwhere句でフィルタリングする必要があります。

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

必要なことを達成する別の方法はありますか?

4

1 に答える 1

5

残念ながら、使用するliunqプロバイダーはfetchXMLに要約され、fetchXMLは使用しているシナリオをサポートしていないため、単一のlinqステートメントで目的を達成することはできません。

詳細...フェッチは、エンティティまたはリンクエンティティの内部の条件を提供します。これらの条件要素には、他のリンクされたエンティティからの属性を含めることはできません。直接の親エンティティまたはリンクエンティティのみを含めることができます。これは、fetchXMLのこの制限を参照している多くのMicrosoftフォーラムの投稿の1つです。

おそらくあなたが探していた答えではないでしょう?醜い代替手段として、2つの別々のクエリを実行し、メモリでフィルタリングすることができます(パフォーマンスに悪影響を与える可能性があります)。または、オンプレミス展開の場合は、フィルタリングされたビューに対してSQLを記述できます。幸運を。

于 2012-05-28T03:15:45.263 に答える