我有一个API控制器,其中包含以下用于检索一个特定对象的方法。输出格式为Json。
[Route("~/api/orders({key:int})", Name = "GetOrder")]
public IHttpActionResult GetOrder([FromODataUri] int key, ODataQueryOptions<Order> queryOptions)
它的工作原理如下。
使用
将Odata过滤器应用于基本查询queryOptions.ApplyTo(baseQuery.OrderByDescending(f =&gt; f.Id) ,querySettings);
返回结果IQueryable
问题是这导致列表包含一个对象(要求的对象)。我想让它返回对象本身,而不是一个包含该对象的列表。
我尝试将FirstOrDefault()添加到baseQuery但是会导致执行查询,之后无法应用OData过滤器。
答案 0 :(得分:1)
使用System.Web.Http.SingleResult可以使这项工作
SingleResult.Create(queryable)
示例:
[EnableQuery]
[ODataRoute("Order({orderId})")]
public SingleResult<Order> Get(int orderId)
{
var result = _myOrders.AsQueryable().Where(mo => mo.ID == orderId);
return SingleResult.Create(result);
}
由于EnableQuery Attribute,QueryOptions将在控制器中返回结果后应用。