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

时间:2013-11-18 19:24:53

标签: 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({ shipmentID: shipmentID, caseID: caseID })
            .orderByDesc("Case.ID")

GetEditShipmentAppeals是一个包含第一个查询的web api方法。尽管在查询中使用了.Include(“Case”),但我无法在微风查询的order by子句中使用“Case.ID”。

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

即使我在一个不涉及web api中的EF查询的微风查询中使用导航属性,它也不起作用。在上面的查询中,Case是Appeal表中的导航属性。

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的示例,那么我认为这是一个实体框架问题。我的理解是实体框架不支持投影上的“包含”。见http://connect.microsoft.com/VisualStudio/feedback/details/347543/entity-framework-eager-loading-not-working-in-some-projection-scenarios

为了确认这一点,我会尝试单独执行你的EF查询,看看“包含”是否真的在做任何事情。我的猜测是,它不是。

但是,您仍然可以通过略微不同的服务器端投影来完成您想要的任务。 (我不确定什么对象'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对象,但每个对象(即Appeals和Cases)中的每个“实体”都将是完整的Breeze实体,并且将成为EntityManager的一部分缓存。