Для получения выборки ссылочной сущности (отношение N:1) по списку Id основной сущности в запрос нужно передавать эти Id в виде Guid-ов. Guid-ы извлекаются из выборки записей основной сущности, где они содержаться в атрибуте первичного ключа (PK). Это атрибут имеет тип Microsoft.Crm.Sdk.Key и напрямую в Guid никак не хочет преобразовываться. Пришлось применитть 2-х шаговое преобразование с использованием промежуточных переменных:
Код:
ce = new ConditionExpression();
ce.AttributeName = "new_primaryobjectreference";
ce.Operator = ConditionOperator.In;
ce.Values = new Object[result.BusinessEntityCollection.BusinessEntities.Count];
Key dekey;
Guid deid = new Guid();
for (int i = 0; i < result.BusinessEntityCollection.BusinessEntities.Count; i++)
{
de = (DynamicEntity)result.BusinessEntityCollection.BusinessEntities[i];
dekey = de.Properties["new_primaryobjectid"] as Key;
deid = dekey.Value;
ce.Values[i] = deid;
}
Решение не самое элегантное, но иначе мне никак не удавалось произвести необходимое преобразование - все время вылетала ошибка. Ким еще образом можно (или нужно) это сделать?
В начале я вообще не думал, что нужно будет делать какие-либо преобразования. Для передачи значений создал универсальный массив generic-объектов, в который просто сохранял список ключей. Но при выполении запроса CRM ругался:
"ты подсунул Key туда где нужен Guid" и пришлось искать способ привести значения к нужному типу.