Выполнение сложного запроса с Dynamics CRM 4.0 - PullRequest
1 голос
/ 18 июня 2009

У меня есть два пользовательских объекта, 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 ]

1 голос
/ 18 июня 2009

В объекте 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, которое извлекает продукты. Для этого вам нужно использовать Fetch XML.

0 голосов
/ 03 июня 2010

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

0 голосов
/ 18 июня 2009

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

...