0

我想在我的所有集合上使用 iqueryable,以便获得所有 odata 功能。但是,我需要使用以下字段格式化请求的响应;

{
   href: "url to resouce",
   length: 10,
   items: [
     "(IQueryable results)"
   ]
}

格式化响应并不是困难的部分,但保持所有 odata “东西”的工作是困难的。

所以我的代码看起来像;

MyFormattedResponse.Href = "poop.com";
MyFormattedResponse.Length = 0;
MyFormattedResponse.Items = _myRepo.Gets();
Request.CreateResponse(HttpStatusCode.OK, MyFormattedResponse);

但我得到的错误是:

返回类型为“MyObject”的控制器“MyResource”上的“Get”操作不支持查询。确保返回内容的类型是 IEnumerable、IQueryable 或任一接口的通用形式。

这是我可以在媒体格式化程序或过滤器中构建的东西吗?

我真的很想保持 odata 的魅力......

4

1 回答 1

0

看看我提供的这个答案:

Web API Queryable - 如何应用 AutoMapper?

您的情况类似,您可以执行以下操作:

public MyFormattedResponse Get(ODataQueryOptions<Person> query)
{
    var results = query.ApplyTo(_myRepo.Gets()) as IEnumerable<Person>;
    return new MyFormattedResponse() { Href = "foo.com", Length = 5, Items = results };
}

确保删除该[Queryable]属性。

于 2013-04-23T22:46:47.570 回答