您需要执行与SelectExpandQueryOption.ApplyTo相同的操作。
1)优化查询到后端。与其从数据库中获取整个实体,不如仅获取客户端要求的属性并将其包装成一个 IEdmEntityObject。将集合作为 EdmEntityObjectCollection 返回。此步骤是可选的。您可以选择忽略此步骤并返回 IQueryable 并仍然让 $select 工作。
2) 告诉 OData 格式化程序仅序列化请求的字段。这可以通过使用扩展方法在 Request 对象上填充 SelectExpandClause 来完成Request.SetSelectExpandClause
。
public class CustomersController : ODataController
{
public IEnumerable<Customer> Get(ODataQueryOptions<Customer> query)
{
Customer[] customers = new[] { new Customer { ID = 42, Name = "Raghu" } };
// Apply query
var result = customers;
// set the SelectExpandClause on the request to hint the odata formatter to
// select/expand only the fields mentioned in the SelectExpandClause.
if (query.SelectExpand != null)
{
Request.SetSelectExpandClause(query.SelectExpand.SelectExpandClause);
}
return result;
}
}