getEntityList = function (predicate) {
var query = new entityModel.EntityQuery().from("EntityList");
if (predicate)
query = query.where(predicate);
return manager.executeQuery(query);
}
Run Code Online (Sandbox Code Playgroud)
但我想在返回任何可查询结果之前将其他参数传递给控制器操作:
[AcceptVerbs("GET")]
public IQueryable<Entity> EntityList(string actionParam) {
//here goes logic that depends on actionParam
//and returns IQueryable<Entity>
}
Run Code Online (Sandbox Code Playgroud)
正如我们从文档中所知:
Breeze将查询转换为OData查询字符串,例如:
?$ FILTER =的isArchived%20当量%20false&$排序依据= CreatedAt
这是问题开始的地方.我应该如何构建查询以将param传递给控制器操作?
getEntityList = function (predicate, actionParam) {
var query = new entityModel.EntityQuery().from("EntityList");
if (predicate)
query = query.where(predicate);
if(actionParam)
// ???
return manager.executeQuery(query);
}
Run Code Online (Sandbox Code Playgroud)
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{actionParam}",
defaults: new { query = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
并通过在from部分中应用它来发送actionParam,
var query = new entityModel.EntityQuery()
.from("EntityList/" + encodeURIComponent(actionParam));
Run Code Online (Sandbox Code Playgroud)
但编码在某些特殊字符上失败,并且抛出了错误的请求.
如何在这种情况下正确发送actionParam?请帮忙.
Jay*_*and 24
从v 0.76.1开始,您可以使用EntityQuery.withParameters方法将其他参数传递给任何服务方法.因此,您现在可以构建如下所示的查询,它们都传递参数并使用breeze的IQueryable支持.
EntityQuery.from("EmployeesFilteredByCountryAndBirthdate")
.withParameters({ BirthDate: "1/1/1960", Country: "USA" })
.where("LastName", "startsWith", "S")
.orderBy("BirthDate");
Run Code Online (Sandbox Code Playgroud)
你的控制器方法看起来像这样:
[HttpGet]
public IQueryable<Employee> EmployeesFilteredByCountryAndBirthdate(DateTime birthDate, string country) {
return ContextProvider.Context.Employees.Where(emp => emp.BirthDate >= birthDate && emp.Country == country);
}
Run Code Online (Sandbox Code Playgroud)
API文档包含更多信息.
更新:作为BREEZE v.0.76.1,这不是更正确的答案.BREEZE现在支持QUERIES的参数.查看" withParameters "QUERY CLAUSE.
Breeze已经添加了对参数化查询的支持,这部分归功于SO上的这个问题.谢谢.
这个答案用于描述不再需要的解决方法.我修改了我的答案,取消了对该变通方法的描述.