4

この質問を書くのはこれが2回目ですが、以前は説明が悪かったので、まず申し訳ありません。

CRM データベースの検索ページに対して linq クエリを実行していますが、以下のような通常のクエリを記述しても機能せず、例外が発生します。

 [System.ServiceModel.FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>] = {"'Contact' entity doesn't contain attribute with Name = 'title'."}

結合クエリの場合、句の Where は r.Name == "Me" && j.LastName == "He" のようなものでした。上記と同じ例外が発生していたため、2 つの Where 句を使用してクエリを実行する必要がありました。 、テーブル 'r' には 'LastName' 属性がないと言っています。

var cms = from i in aux_pr
       join cal in Contact on i.aux_CallerRequestorID.Id equals cal.ContactId.Value
       join sub in Subject on i.aux_ClassificationID.Id equals sub.SubjectId
       where cal.FullName.Contains(searchTerm) ||
       sub.Title.Contains(searchTerm)

この場合、このクエリを実行するにはどうすればよいですか。前もって感謝します!

4

2 に答える 2

5

私が学んだことと、誰かを助けることができることを願って私が見つけた問題の解決策についてコメントしたいと思います. こちらで説明されているように、CRM LINQ にはいくつかの制限があります。

最初に見つけたのは、次のようなエンティティ参照です。

CrmEntityReference Caller
{
   Guid ID;
   string name;    
}

Caller.name を選択できますが、where 句に Caller.name を含めることはできません。これに対する解決策 -> テーブルに参加する

2 番目の制限は、クエリに結合がある場合、AND 述語の場合に異なるテーブルを使用できることです。次のように 2 つの句を記述する必要があります。

   where cal.FullName.Contains(searchTerm)
   where sub.Title.Contains(searchTerm)

しかし問題は、AND の代わりに OR 述語を使用する必要がある場合に発生します。唯一の解決策は、2 つのクエリを実行してから、これらのクエリの Union を実行することです。

呼び出しに対して 4 つのクエリを実行できますが、これは 1 つだけで実行できます。開発段階では、レコードの量によりパフォーマンスは良好ですが、テスト段階でこれがどのように機能するかを確認します。

于 2012-11-30T12:02:03.777 に答える
0

2つの異なるフィルターを作成してみてください。

   var cms = from i in aux_pr
   join cal in Contact on i.aux_CallerRequestorID.Id equals cal.ContactId.Value
   join sub in Subject on i.aux_ClassificationID.Id equals sub.SubjectId
   where cal.FullName.Contains(searchTerm) ||
   where sub.Title.Contains(searchTerm)
于 2012-11-28T16:06:51.253 に答える