如何将此linq查询转换为breeze查询

如何将此linq查询转换为breeze查询,breeze,Breeze,我正在学习Durandal和Breeze。并选择创建nerddinner的SPA版本 我需要执行的第一个查询是: public IEnumerable<JsonDinner> GetMostPopularDinners(int limit = 10) { var mostPopularDinners = from dinner in _db.Context.Dinners.Include("RSVPs")

我正在学习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);
    }

抱歉,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);
}
[HttpGet]
公共IQueryable GetMostPopularDinners(日期时间事件日期){
返回_db.Context.dinters。
.Where(晚餐=>晚餐.EventDate>=事件日期)
.OrderByDescending(晚餐=>晚餐.RSVPs.Count);
}

而且。。。您不需要打JSONdinnerFromDiner“电话;Breeze会自动处理此问题。

Martin,您遇到了什么问题?请澄清。
[HttpGet]
public IQueryable<Dinner> GetMostPopularDinners(DateTime eventDate) {
      return _db.Context.Dinners.
         .Where(dinner => dinner.EventDate >= eventDate)
         .OrderByDescending(dinner => dinner.RSVPs.Count);
}