Выполнение сложных запросов с Dynamics CRM 4.0

Asked
Viewd3388

1

У меня есть два настраиваемых объекта, Product и ProductType, связанных между собой отношениями "многие к одному". У продукта есть поле поиска для ProductType.

Я пытаюсь написать запрос для получения продуктов Type1 с ценой более 100 и продуктов Type2 с ценой ниже 100.

Вот как я бы сделал это в SQL:

 select *
  from Product P
 inner join ProductType T on T.Id = P.TypeId
 where (T.Code = 'Type1' and P.Price >= 100)
    or (T.Code = 'Type2' and P.Price < 100)
 

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

Есть ли способ выполнить этот запрос за одну операцию?

Спасибо!

3 ответов

0

К сожалению, нет, это невозможно сделать с помощью QueryExpression или FetchXML. По крайней мере, не с Dynamics CRM 4. Будем надеяться, что они включат эту функцию в версию 5 (2-я половина 2010 г.)

0

Вы также можете взглянуть на LinqtoCRM . Он преобразует запросы в FetchXML, чтобы вы могли получать атрибуты для объединенных объектов.

1

В объекте QueryExpression есть свойство с именем LinkEntities. Вы можете создать объект LinkEntity, который задает информацию о «соединении», а затем добавить ее в свой объект ссылки. Например:

 QueryExpression q = new QueryExpression();
LinkEntity l = new LinkEntity();
l.LinkFromAttributeName = "fromatt";
l.LinkToAttributeName = "toatt";
l.LinkFromEntityName = "product";
l.LinkToEntityName = "producttype";

FilterExpression f = new FilterExpression();
f.AddCondition(new ConditionExpression("code", ConditionOperator.Equal, "type1"));
l.LinkCriteria = f;
q.LinkEntities.Add(l);
 

Обратите внимание, что вы фактически не можете получить ни один из атрибутов объекта ProductType из выражения QueryExpression, которое извлекает Products. Для этого вам придется использовать Fetch XML.