0

我正在学习 Durandal 和 Breeze。并选择创建 nerddinner 的 SPA 版本。

我需要执行的第一个查询是:

 public IEnumerable<JsonDinner> GetMostPopularDinners(int limit = 10)
    {
       var mostPopularDinners = from dinner in _db.Context.Dinners.Include("RSVPs")
                                where dinner.EventDate >= DateTime.Now
                                orderby dinner.RSVPs.Count descending
                                select dinner;

        if (limit > 50 || limit <= 0)
            limit = 10;

        return mostPopularDinners.Take(limit).AsEnumerable().Select(JsonDinnerFromDinner);
    }

我已经开始轻而易举地写它了,但是我在这行“orderby Dinner.RSVPs.Count descending”上遇到了麻烦,这就是我到目前为止所拥有的。

var getMostPopularDinners = function() {
        var query = EntityQuery
            .from('dinners')
            .where('eventDate', '>=', new Date(Date.now()))
            .orderByDesc('RSVPs')
            .expand('RSVPs');
4

1 回答 1

1

抱歉,Breeze 尚不支持对聚合值(在本例中为“计数”)进行排序或过滤。

你可以做的就是把它变成一个命名查询。(没有很好的记录......)基本上这涉及使用EntityQuery.withParameters方法将附加参数传递给任何服务方法。因此,您可以构造一个如下所示的查询,它既传递参数又仍然使用 Breeze 的 IQueryable 支持。

EntityQuery.from("GetMostPopularDinners")
             .withParameters({ EventDate: new Date(Date(now()) })
             .take(10);

你的控制器方法看起来像这样:

[HttpGet]
public IQueryable<Dinner> GetMostPopularDinners(DateTime eventDate) {
      return _db.Context.Dinners.
         .Where(dinner => dinner.EventDate >= eventDate)
         .OrderByDescending(dinner => dinner.RSVPs.Count);
}

并且...您不需要进行 JsonDinnerFromDinner" 调用;Breeze 会自动处理此问题。

于 2013-09-16T23:05:25.423 回答