如何将此linq查询转换为breeze查询
我正在学习Durandal和Breeze。并选择创建nerddinner的SPA版本 我需要执行的第一个查询是:如何将此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")
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);
}