Извлечение отличительных записей с помощью выражения запроса в Microsoft CRM 2011 - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть сомнения в получении записей в CRM 2011 с использованием метода C # RetrieveMultiple в веб-сервисе.

Мне нужно извлечь отдельные записи из сущности на основе значения атрибута (первичный ключ).Я могу добиться этого с помощью кода ниже

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

Вывод:

primarycolumn  column1
xyz            1
lmn            2 

Это отображает различные записи.Но если я добавлю еще несколько столбцов в набор столбцов, результаты не будут различимы.Это показано в приведенном ниже коде

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

Вывод:

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

Мне нужно, чтобы результат отличался только по основному столбцу.

Пожалуйста, помогите мнекак этого добиться.


  • Более подробная информация по вышеуказанному вопросу.

На самом деле код написан на 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/>

Приведенный ниже код дает следующий вывод

     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/>

Но по мере того, как я добавляю больше столбцов в набор столбцов, выходные данные учитывают различные значения других столбцов, а также

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/>

фактически, код находится на 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/>

Но поскольку я добавляю больше столбцов в набор столбцов, выходные данные также учитывают различные значения других столбцов

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/>

1 Ответ

4 голосов
/ 08 декабря 2011

Отредактированный ответ:

Мне нужно, чтобы результат отличался только по основному столбцу.

Указанное выше требование невозможноиспользуя сервисный вызов RetrieveMultiple.По сути, вы запрашиваете способ получения первой записи для каждой записи с уникальным первичным столбцом.Это может быть возможно при использовании сгенерированных ранних объектов, но невозможно при использовании только стандартных методов обслуживания.

Чтобы достичь того, что вам нужно, вам нужно будет извлечь все записи, что и делает ваш текущий запрос:

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