Выполнение сложного запроса с помощью Dynamics CRM 4.0

StackOverflow https://stackoverflow.com/questions/1009359

  •  06-07-2019
  •  | 
  •  

Вопрос

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

Я пытаюсь написать запрос для получения товаров типа 1 с ценой более 100 и товаров типа 2 с ценой ниже 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

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

Другие советы

На QueryExpression объект, существует свойство, называемое LinkEntities.Вы можете создавать LinkEntity объекты, которые указывают информацию "join", а затем добавляют ее к вашему объекту link.Например:

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.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top