1

我有两个自定义实体 Product 和 ProductType,它们以多对一的关系链接在一起。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 来做到这一点。我知道我可以用两个查询来做到这一点,但我想尽量减少到服务器的往返。

有没有办法只在一个操作中执行该查询?

谢谢!

4

3 回答 3

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);

请注意,您实际上无法从正在检索产品的 QueryExpression 获取 ProductType 实体上的任何属性。为此,您必须使用 Fetch XML。

于 2009-06-17T22:02:49.403 回答
0

你也可以看看LinqtoCRM。它将查询转换为 FetchXML,以便您可以获取连接实体的属性。

于 2009-06-18T07:15:46.467 回答
0

不幸的是,不,不可能使用 QueryExpression 或 FetchXML 来做到这一点。至少,Dynamics CRM 4 没有。希望他们在版本 5 中包含此功能(2010 年第二半)

于 2010-06-03T14:37:10.573 回答