2016-06-15 12 views
1

ダイナミクスcrmの一部のデータを変更しようとしています。 これを達成するために、私は、スピードの基準を持つエンティティを検索するプラグインを作成したいと思います。Dynamics QueryExpression - fieldAがfieldBと等しいエンティティレコードを見つける

これまでのところ、それほど特別ではありません。

私はのQueryExpressionを行うと、私は「フィールドA」をテストすることであり、今異なっている何Aは、(例えば、文字列)「という値を」持っているentitsの「フィールドA」

がどこにあるか検索することができ「フィールドB」に等しい。それは だろうT-SQLで

ので、私は同じエンティティレコードの属性値に1つのエンティティのレコードの属性値を一致させたい*どこtable1.fielda = table1.fieldb

を選択します。

QueryExpressionのテーブルで結合を行う方法(APIリファレンスはhttps://msdn.microsoft.com/en-us/library/dn481591.aspx)が見つかりましたが、私はそれを私のポルプス用に使用する方法を見つけることができません。私の要求に合っているか、それが間違っているかどうか。

誰かがそれをしましたか?

Thxを

---- UPDATE ----私がこれまで試したどのような

: は、私は私の自己は、LINQクエリに参加構築しようとした@Brendonコルバーン が提供するポストに基づいています。クエリの構築

は、残念ながら、私はachiveしようとしていた何のために制限を持っていた:

あなたが別のフィールドを比較するquerysを構築することはできません。

コード例から: CRM 2011: An unhandled exception of type 'System.InvalidOperationException' occurred. referenced from scope '', but it is not defined

(from cl in context.CreateQuery<ContractDetail>() 
join a in context.CreateQuery<Account>() 
on cl.CustomerId.Id equals a.AccountId 
where cl.StateCode.Value == 0 
where cl.new_SupportedBy == a.Name 
select cl).ToList(); 

は 'System.InvalidOperationException' 種類の未処理の例外は、ConsoleApplication1.exe

で発生した エラーをスロー

詳細情報は、スレッドで見つけることができ CRM 2011: An unhandled exception of type 'System.InvalidOperationException' occurred. referenced from scope '', but it is not defined

最終的には、それを見栄えのよい方法でアーカイブすることはできないようです。

私は見たいと思っているすべてのエンティティレコードを検索して、for - eachループで判断した条件に基づいてレコードを探し出すようになります。 :(((

答えて

0

Dynamics CRMでは、LinqクエリはQueryExpressionに基づいており、その制限を継承しています。 QueryExpressionでは、フィルタリングはConditionExpressionオブジェクトを使用して行われます。

  1. 属性名(左側)
  2. オペレータ
  3. (オプション)一つ以上のリテラル値

値にすることはできません。ConditionExpressionは常に2つのまたは3つのパラメータを持っています属性名によって識別される。

したがって、ジョインで必要な結果を得ることができない場合、唯一のオプションは、実際に必要以上に多くのレコードを照会し、後でフィルターすることです。

完全信頼(実行中のみ)モードで実行されているプラ​​グインでは、実際にCRMデータベースに直接アクセスしてSQLクエリを実行することは可能ですが、これはちょっとしたハックです。

-1

正直、私はあなたが何か間違っていると思います。スタックオーバーフローのどこか他の場所から提供している例は自己結合ではありません。もしあなたが洞察力のある質問を出さなければならないのであれば、それは私には間違いないと言われています。

私はあなたが自己結合であると信じていますか?私はこのLINQクエリで同じことを達成する方が簡単かもしれないと思う:

using (ServiceContext svcContext = new ServiceContext(_serviceProxy)) 
{ 
    var query_join5 = from a in svcContext.AccountSet 
        join a2 in svcContext.AccountSet 
        on a.ParentAccountId.Id equals a2.AccountId 

        select new 
        { 
        account_name = a.Name, 
        account_city = a.Address1_City 
        }; 
    foreach (var c in query_join5) 
    { 
    System.Console.WriteLine(c.account_name + " " + c.account_city); 
    } 
} 

もちろん、フィールド名とエンティティ名を置き換える。 https://msdn.microsoft.com/en-us/library/gg334593.aspx

関連する問題