【发布时间】:2012-11-30 13:27:30
【问题描述】:
假设以下模型:(示例取自 Breeze DocCode)
public class Customer {
public Guid CustomerID { get; internal set; }
public ICollection<Order> Orders { get; set; }
}
public class SomeDetail{
public string name{ get; set; }
}
public class Order {
public int OrderID {get; set;}
public Guid? CustomerID {get; set;}
public SomeDetail detail {get; set;}
}
对单个导航属性的嵌套查询对我来说很清楚。如果导航属性是一个集合,怎么可能做到这一点?像这样的:
var query = EntityQuery.from("Customers")
.where("Orders.detail.name", "==", someName);
作为“文本”: 选择该客户拥有的任何订单的明细名称等于 someCondition 的所有客户?
我在这里遇到错误是因为
.where("Orders.detail.name, "=", someCondition)
由于收集而无法实现。 有没有一种简单的方法来检查这种情况,而不需要建立一个数量的集合和手动过滤?
这里非常感谢任何帮助。
【问题讨论】:
-
是的......你还不能这样做。我假设您的意思是“给我每个客户的订单,其名称为'someName'”。这样的查询需要两个“Any”子句。今天的 OData 规范不支持这一点。我们正在努力。如果您只需要回答这个问题,我实际上有办法进行此查询。它涉及控制器上的自定义查询方法。您不能编写客户端过滤器或扩展。您所能做的就是传递诸如“someName”之类的参数。让我知道你是否想要那个。同时,我们的积压工作要求让这种事情变得更容易/可能。
-
我也非常希望看到这种方式。这将有助于我简化事情。
-
这还不是我想要的,我还没有准备好谈论它,但我将 queryTests.js 中的一个 DocCode 测试推送到 github,称为“Chai 的订单”。对应的
NorthwindController方法是OrdersForProduct。用它来获得灵感。我们会做得更好。
标签: breeze