我有两个自定义的产品,产品和产品类型,以多对一的关系链接在一起。 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,以便您可以获取已连接实体的属性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top