我有一个对象图,它由一个基本员工对象和一组相关的消息对象组成。
我能够根据员工属性(例如团队)等的搜索条件返回员工对象。但是,如果我扩展消息,我会收到完整的消息集合。我希望能够获取前n个消息(即限制为最近的10个)或理想地使用消息对象上的日期范围来限制返回的数量。
到目前为止,我还没有找到一种方法: 如果我尝试过滤消息上的属性,我会收到错误(& $ filter = employee / message / StartDate给出错误“>类型'System.Data.Objects.DataClasses.EntityCollection'中不存在属性'StartDate' 1)。
尝试在消息相关对象上使用Top也不起作用。
我还尝试使用WebGet扩展,该扩展获取员工ID的字符串列表。这可以工作,直到列表太长,然后由于URL太长而失败(可能在这种方法上设置分页机制)...
不幸的是,我使用的UI控件要求数据具有相当特定的层次结构形状,所以我不能轻易地从消息方面开始并向后工作。
在进行多次调用之外,是否有人知道使用wcf数据服务实现此目的的方法?
谢谢! M.
答案 0 :(得分:0)
看起来这样做的唯一真正方法实际上是颠倒查询的方向。
因此,我不是从员工开始,而是从消息方面开始。您可以过滤员工属性,并限制Messages集合。它并不理想,因为它意味着在返回时重复收集集合以将其重新集中在员工身上,以便我尝试做什么,但它会起作用。 Silverlight和富客户端的异步性质至少意味着需要额外的迭代时,它仍然看起来相当快。
另一个有趣的事情是:当前版本的odata / wcf数据服务不支持查询继承类的属性,因此我不得不将开始/结束日期属性移动到基类,以便能够限制我对它们的搜索。
http://Site/Service.svc/Messages()?& $ filter =员工/ OfficeName eq'多伦多'和(年(StartDate)eq 2010和月(StartDate)ge 9)