2011-12-07 7 views
0

WebサービスでC#RetrieveMultipleメソッドを使用してCRM 2011でレコードを取得することに疑問があります。Microsoft CRM 2011でクエリ式を使用した個別レコードの取得

属性値(主キー)に基づいてエンティティから別のレコードを取得する必要があります。これは、個別のレコードを表示

primarycolumn column1 
xyz   1 
lmn   2 

:私はコード

QueryExpression query = new QueryExpression("entityname"); 
query.ColumnSet.AddColumns("primarycolumn", "column1"); 
query.Distinct = true; 
EntityCollection result1 = serviceProxy.RetrieveMultiple(query); 

以下の出力を使用することによって、これを達成することができています。しかし、列セットに列をいくつも追加しても、結果は明確ではありません。私は、プライマリ列に基づいて異なることが結果を必要

primarycolumn column1 column2 
xyz   1  a   
xyz   1  b 
lmn   2  a 

:これは

QueryExpression query = new QueryExpression("entityname"); 
query.ColumnSet.AddColumns("primarycolumn", "column1", "column2"); 
query.Distinct = true; 
EntityCollection result1 = serviceProxy.RetrieveMultiple(query); 

出力以下のコードで示されています。

これを達成する方法を教えてください。上記の質問に


  • 詳しい情報。

実際には、コードはC#にあります。次の表は、私が照会している表を示しています

**Primary 
column Column1    Column2    Column3<br/>** 



Xyz   Value1    Value1    Value1 <br/> 
Xyz   Value2    Value2    Value2<br/> 
Lmn   Value1    Value1    Value1<br/> 
Lmn   Value2    Value2    Value2<br/> 
Xyz   Value1    Value1    Value1<br/> 
Lmn      Value1    Value1    Value1<br/> 

照会の結果は以下のようになります。プライマリ列の個別値のみを考慮する必要があり、他のすべての列は個別または個別ではありません。プライマリ列の異なる値のいずれかの行は、表示する必要があります。 、ctually

QueryExpression query = new QueryExpression("entityname"); 
query.ColumnSet.AddColumns("primarycolumn", "column1", "column2"); 
query.Distinct = true; 
EntityCollection result1 = serviceProxy.RetrieveMultiple(query); 

**Primary 
column Column1 Column2 Column3<br/>** 
Xyz Value1 Value1 Value1<br/> 
Xyz Value2 Value2 Value2<br/> 
Lmn Value1 Value1 Value1<br/> 
Lmn Value2 Value2 Value2<br/> 

(This is the output I am trying to achieve)<br/> 
**Prmrycolumn Column1 Column2 Column3<br/>** 
Xyz Value1 Value1 Value1<br/> 
Lmn Value1 Value1 Value1<br/> 

以下のコードは、次のような出力

 QueryExpression query = new QueryExpression("entityname"); 
query.ColumnSet.AddColumns("primarycolumn", "column1"); 

    query.Distinct = true; 
    EntityCollection result1 = serviceProxy.RetrieveMultiple(query); 

    **Primary column Column1**<br/> 
    Xyz Value1<br/> 
    Lmn Value1<br/> 

を与えるしかし、私はcolumnsetに複数の列を追加すると、出力は他の列の異なる値を検討しているにも

コードはC#にあります。次の表は、私が照会している表を示しています

**Primary 
column Column1    Column2    Column3<br/>** 



Xyz   Value1    Value1    Value1 <br/> 
Xyz   Value2    Value2    Value2<br/> 
Lmn   Value1    Value1    Value1<br/> 
Lmn   Value2    Value2    Value2<br/> 
Xyz   Value1    Value1    Value1<br/> 
Lmn      Value1    Value1    Value1<br/> 

照会の結果は以下のようになります。プライマリ列の個別値のみを考慮する必要があり、他のすべての列は個別または個別ではありません。プライマリ列の異なる値のいずれかの行は、表示する必要があります。

(This is the output I am trying to achieve)<br/> 
**Prmrycolumn Column1 Column2 Column3<br/>** 
Xyz Value1 Value1 Value1<br/> 
Lmn Value1 Value1 Value1<br/> 
The below code gives the following output 

QueryExpression query = new QueryExpression("entityname"); 
query.ColumnSet.AddColumns("primarycolumn", "column1"); 
query.Distinct = true; 
EntityCollection result1 = serviceProxy.RetrieveMultiple(query); 

**Primary column Column1**<br/> 
Xyz Value1<br/> 
Lmn Value1<br/> 

しかし、私はcolumnsetに複数の列を追加すると、出力は他の列の異なる値を検討しても

QueryExpression query = new QueryExpression("entityname"); 
query.ColumnSet.AddColumns("primarycolumn", "column1", "column2"); 
query.Distinct = true; 
EntityCollection result1 = serviceProxy.RetrieveMultiple(query); 

**Primary 
column Column1 Column2 Column3<br/>** 
Xyz Value1 Value1 Value1<br/> 
Xyz Value2 Value2 Value2<br/> 
Lmn Value1 Value1 Value1<br/> 
Lmn Value2 Value2 Value2<br/> 
+2

あなたは何をしようとしているのですか?主キーで照会している場合、レコードの値が複数あるのはなぜですか?あなたは外来キーで質問していますか?この場合、列1と2が異なるので結果が異なるので後者は正しいですか?また、外部/プライマリキーでフィルタリングするためのフィルタがクエリに表示されません。実際のコードを投稿できますか? – Chris

答えて

4

Editted回答:

私はに結果を必要としますプライマリ列のみに基づいて区別する必要があります。

上記の要件は、RetrieveMultipleサービスコールを使用しては不可能です。基本的に求めているのは、一意のプライマリ列を持つ各レコードの最初のレコードを取得する方法です。生成されたEarly Boundエンティティを使用してこれが可能である可能性がありますが、標準のサービスメソッドだけを使用することはできません。

あなたが後にしているものを達成、あなたの現在のクエリが何をしている、すべてのレコードを取得する必要がありますするには:

ueryExpression query = new QueryExpression("entityname"); 
query.ColumnSet.AddColumns("primarycolumn", "column1", "column2"); 
query.Distinct = true; // this distinct will apply over all columns 
EntityCollection result1 = serviceProxy.RetrieveMultiple(query); 

このデータが受信されたら、あなたはすべて除外する必要があります。あなたが無視したいレコード。あなたの場合、最初に見つかったレコードのみが必要です。これを実現するには、C#コードを次のように使用します。

// this code filters out all records except the 
// first for each unique primary column 
var unique = result1.Entities.GroupBy(item => item.GetAttributeValue<Guid>("primarycolumn")) 
          .Select(item => item.First()); 
+0

ありがとうございました。上記のGroupByメソッドは私のために働き、私に必要なものを正確に出力しました。これは "query.Distinct = true"とすべての列で機能しました。また、私が下で行った返信を削除する方法を教えてください。 –

+0

問題ありません。答えの横にあるチェックマークをクリックすると、「回答済み」とマークすることを忘れないでください。喜んで助けてください。 –

関連する問題