在breeze查询的orderby子句中使用导航属性

在breeze查询的orderby子句中使用导航属性,breeze,asp.net-web-api,Breeze,Asp.net Web Api,我正在使用breeze调用一个web api方法,该方法是: Repository.ShipmentAppeals.Where(sa => sa.ShipmentID == shipmentID).Select(sa => sa.Appeal).Include("Case"); 我的查询如下所示: var query = EntityQuery.from('GetEditShipmentAppeals') .withParameters({ shipment

我正在使用breeze调用一个web api方法,该方法是:

Repository.ShipmentAppeals.Where(sa => sa.ShipmentID == shipmentID).Select(sa => sa.Appeal).Include("Case");
我的查询如下所示:

var query = EntityQuery.from('GetEditShipmentAppeals')
            .withParameters({ shipmentID: shipmentID, caseID: caseID })
            .orderByDesc("Case.ID")
GetEditShipments是包含第一个查询的web api方法。尽管在查询中使用了.Include(“Case”),但我无法在breeze查询的order by子句中使用“Case.ID”

 var query = EntityQuery.from('Appeals')
                .expand("Case,Patient")
                .orderByDesc("Case.ID").inlineCount();

即使我在不涉及web api中的EF查询的breeze查询上使用navigation属性,它也不起作用。在上面的查询中,Case是上诉表中的导航属性。

如果我正确理解了您的示例,那么我认为这是一个实体框架问题。我的理解是实体框架不支持投影上的“包含”。看

为了确认这一点,我将尝试单独执行您的EF查询,并查看“Include”是否真的在做任何事情。我猜不是

然而,您仍然可以通过稍微不同的服务器端投影来实现您想要的。(我不确定什么对象'Case'是的属性,语法可能有点不正确,但是…)类似于:

Repository.ShipmentAppeals.Where(sa => sa.ShipmentID == shipmentID).Select(sa => new 
   { Appeal: sa.Appeal, Case: sa.Appeal.Case, CaseId: sa.Appeal.Case.Id });

请注意,Breeze将从此查询返回一组“匿名”javascript对象,但每个对象中的每个“实体”(即上诉和案件)都将是完整的Breeze实体,并且将是EntityManager缓存的一部分

我确信include正在处理EF查询,因为我在knockout数据绑定中使用Case对象的属性,并且我可以看到显示的数据。客户端上“Case”属性的名称是什么,以及它的“ID”属性的名称是什么。orderBy子句采用客户端属性名称。我不知道你的breeze-NamingConvention是什么,但可能是你的orderBy子句应该是orderByDesc(“case.iD”)。您可以查看元数据存储以确定breeze认为属性名称实际上是什么。我已经编辑了我的问题。导航属性在breeze查询的order by子句中也不起作用。我无法重新设置此属性。请查看网站上Breeze zip中的Breeze DocCode示例。有几个这样的例子。我还要检查您是否正在使用Breeze Naming约定,如果是,请检查元数据存储中的propertyNames是否与您认为的相同。