我在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中是否存在已知错误?
答案 0 :(得分:0)
我认为您应该尝试以下代码:
var queryResult = options.ApplyTo(results.AsQueryable());
您可能会发现即使您删除$expand=ItemSerial
,您的WOrkOrders也会一直展开,因为您没有使用ApplyTo
函数的结果。
答案 1 :(得分:0)
MS的OData存在错误。您可以在执行ResultCount
之前手动将ApplyTo
设置为数字来防止这种情况发生。