我在这里遇到了一个不寻常的情况。我有一个WebAPI breeze控制器,其中包含以下操作方法:
[HttpGet]
public IQueryable<Client> Clients(bool IsEbasys = false)
{
if (IsEbasys)
{
List<Client> lst = new List<Client>();
lst.Add(new Client() { FirstName = "Sam", LastName = "Smyth" });
return lst.ToList().AsQueryable<Client>();
}
else
{
return _contextProvider.Context.Clients;
}
}
2个场景:
如果我删除了班级上的[BreezeController]
属性,则硬编码列表将被正常返回。但当然第二个不再有效(实际上,无论查询过滤器如何,它都会返回所有客户端实体)。
如果我在我的类上添加[BreezeController]
属性,则查询上下文按预期工作,但由于某些原因,硬编码列表作为空数组返回给客户端,尽管它应该包含一个客户端。
这有解决方法吗?或者我不能只在同一个控制器中混合两个?
答案 0 :(得分:3)
您是否尝试将BreezeQueryable属性添加到方法中?
[HttpGet]
[BreezeQueryable]
public IQueryable<Client> Clients(bool IsEbasys = false)
{
if (IsEbasys)
{
List<Client> lst = new List<Client>();
lst.Add(new Client() { FirstName = "Sam", LastName = "Smyth" });
return lst.ToList().AsQueryable<Client>();
}
else
{
return _contextProvider.Context.Clients;
}
}
来自http://www.breezejs.com/documentation/web-api-controller
BreezeQueryableAttribute
Breeze客户端通过向格式化为OData查询URL的控制器发送HTTP GET请求来查询数据。例如,客户端可以使用此URL查询按创建日期排序的活动(非归档)待办事项。
1 ... / breeze / todos / Todos?$ filter = IsArchived eq false&amp; $ orderby = CreatedAt 使用Breeze [Queryable]属性[1],Breeze可以扩展控制器的Todos操作方法返回的IQueryable(参见上面的代码示例)。净效果是LINQ查询,例如:
1 2 query = _contextProvider.Context.Todos .Where(t =&gt; t.IsArchived == false).OrderBy(“CreatedAt”); 修改了IQueryable后,Breeze可以执行它,调用查询的LINQ提供程序(本例中为Entity Framework提供程序)。