使用Dynamics CRM 4.0执行复杂查询
-
06-07-2019 - |
题
我有两个自定义的产品,产品和产品类型,以多对一的关系链接在一起。 Product有一个ProductType的查找字段。
我正在尝试编写一个查询,以获取价格超过100的Type1产品,以及价格低于100的Type2产品。
以下是我将如何在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版(2010年下半年)中包含此功能
其他提示
在 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);
请注意,您实际上无法从正在检索产品的QueryExpression中获取ProductType实体上的任何属性。为此,您必须使用Fetch XML。
您还可以查看 LinqtoCRM 。它将查询转换为FetchXML,以便您可以获取已连接实体的属性。
不隶属于 StackOverflow