使用$ inlinecount时,OData不会设置所有扩展

时间:2015-08-06 17:46:29

标签: asp.net-web-api odata

我在WebAPI控制器中使用MS中的OData 3。

我的控制器看起来像这样:

public override IEnumerable<WorkOrderModel> Get(ODataQueryOptions<WorkOrderModel> options)
{
    Int64? totalCount;
    var results = _workOrders.Get(options, out totalCount);

    options.ApplyTo(results.AsQueryable());

    return new PageResult<WorkOrderModel>(results,
        Request.ODataProperties()
               .NextLink,
        totalCount);
}

我运行此查询: /odata/WorkOrders?$expand=ItemSerial

我得到了正确的结果,所有WorkOrders都会给我正确的ItemSerial。

但是当我运行时: /odata/WorkOrders?$expand=ItemSerial&$inlinecount=allpages

只有部分工单有物品序列。它不是随机的,它总是相同的,但我无法弄清楚模式。

我必须去ApplyTo,否则我永远不会从OData那里得到扩展。

如果我检查var results,那么我可以看到所有结果都有ItemSerial,但在options.ApplyTo(results.AsQueryable());之后,大多数结果都设置为空。

ODataQueryOptions中是否存在已知错误?

2 个答案:

答案 0 :(得分:0)

我认为您应该尝试以下代码:

var queryResult = options.ApplyTo(results.AsQueryable());

您可能会发现即使您删除$expand=ItemSerial,您的WOrkOrders也会一直展开,因为您没有使用ApplyTo函数的结果。

答案 1 :(得分:0)

MS的OData存在错误。您可以在执行ResultCount之前手动将ApplyTo设置为数字来防止这种情况发生。