我正在学习Durandal和Breeze。并选择创建一个SPA版本的nerddinner。
我需要执行的第一个查询是:
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);
}
我已经开始用微风来写它但是我遇到了这条线“按晚餐排序.RSVPs.Count下降”的麻烦这是我到目前为止所做的。
var getMostPopularDinners = function() {
var query = EntityQuery
.from('dinners')
.where('eventDate', '>=', new Date(Date.now()))
.orderByDesc('RSVPs')
.expand('RSVPs');
答案 0 :(得分:1)
抱歉,Breeze还不支持对聚合值进行排序或过滤(在这种情况下为'count')。
您可以做的是将其转换为命名查询。 (没有详细记录......)基本上这涉及使用 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会自动处理这个。