澄清一下,默认情况下,Breeze 中的所有查询都专门在服务器上执行。(您可以查询本地查询缓存,但我认为这不是您要问的。)您可以控制的是要执行的查询表达式是专门在服务器上定义的,还是基于在服务器上定义的查询组成的服务器以及其他客户端限制。
如果你想在服务器上定义一个返回单个记录的查询,你当然可以这样做。它看起来像这样:
[HttpGet]
public Car Car17()
{
return _contextProvider.Context.Cars.First(c => c.CarId == 17);
}
可以通过以下方式从客户端查询:
var q = EntityQuery.from("Car17");
或者,您可以使用查询参数:
[HttpGet]
public Car CarById(carId)
{
return _contextProvider.Context.Cars.First(c => c.CarId == carId);
}
查询将如下所示:
var q = EntityQuery.from("CarById").withParameters( { carId: 17} );
或者你可以这样做:
[HttpGet]
public IQueryable<Car> AllCars()
{
return _contextProvider.Context.Cars;
}
查询将如下所示:
var q = EntityQuery.from("AllCars").where("CarId", "==", 17);
需要明确的重要一点是,所有这 3 个都在服务器上执行完全相同的查询并返回完全相同的结果。
希望这可以帮助。