1

我在这里面临一个不寻常的情况。我有一个具有以下操作方法的 WebAPI 微风控制器:

    [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]在我的类上添加属性,则查询上下文会按预期工作,但由于某些原因,硬编码列表作为 en 空数组返回给客户端,尽管它应该包含一个客户端。

有解决方法吗?或者我不能将两者混合在同一个控制器中吗?

4

1 回答 1

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 客户端通过将 HTTP GET 请求发送到格式化为 OData 查询 URL 的控制器来查询数据。例如,客户端可以使用此 URL 查询按创建日期排序的活动(非归档)待办事项。

1 .../breeze/todos/Todos?$filter=IsArchived eq false&$orderby=CreatedAt 使用 Breeze [Queryable] 属性 [1] ,Breeze 可以扩展控制器的 Todos 操作方法返回的 IQueryable(参见上面的代码示例) . 最终效果是这样一个 LINQ 查询:

1 2 查询 = _contextProvider.Context.Todos .Where(t => t.IsArchived == false).OrderBy("CreatedAt"); 修改 IQueryable 后,Breeze 可以执行它,调用查询的 LINQ 提供程序(本示例中的实体框架提供程序)。

于 2013-09-13T21:32:30.040 回答