Telerik ToDataSourceResult方法导致oData数据服务查询中出现NotSupportedException

Telerik ToDataSourceResult方法导致oData数据服务查询中出现NotSupportedException,odata,telerik-grid,telerik-mvc,Odata,Telerik Grid,Telerik Mvc,我有一个连接到此控制器的Telerik数据网格(它执行对Microsoft Dynamics 365云服务的oData查询) [路线(“订单”)] 公共操作结果命令([DataSourceRequest]DataSourceRequest请求) { var context=_dynamicContextFactory.CreateContext(); var orderHeaders=context.SalesOrderHeadersV2//TODO:用于用户会话的筛选器//。其中(x=>x.O

我有一个连接到此控制器的Telerik数据网格(它执行对Microsoft Dynamics 365云服务的oData查询)

[路线(“订单”)]
公共操作结果命令([DataSourceRequest]DataSourceRequest请求)
{
var context=_dynamicContextFactory.CreateContext();
var orderHeaders=context.SalesOrderHeadersV2//TODO:用于用户会话的筛选器//。其中(x=>x.OrderingCustomerAccountNumber==“DE-001”)
.选择(
x=>neworderheader()
{
SalesOrderNumber=x.SalesOrderNumber,
OrderTotalAmount=x.OrderTotalAmount,
SalesOrderOriginCode=x.SalesOrderOriginCode,
CustomerTransactionSettlementType=x.CustomerTransactionSettlementType,
OrderCreationDateTime=x.OrderCreationDateTime,
ConfirmedShippingDate=x.ConfirmedShippingDate,
});
//这种方式不适用于执行分页等操作的ToDataSourceResult。
//x=>x.AutoMap());
返回Json(orderHeaders.ToDataSourceResult(请求));
}
分页工作正常,但当我尝试分组或排序时,会出现以下异常:

无法在选择查询选项之后指定orderby查询选项

看起来我需要重新排序DataServiceQuery是如何构造的,但我不知道如何构造。 (如果我使我的API符合oData规范并使用它,会有帮助吗?或者只是将相同的问题转移到其他地方。)

额外信息:
我希望automapper也能正常工作,我希望根本原因是类似的。
以下是我的看法:

      @(Html.Kendo().Grid<MyAccountApiController.OrderHeader>()
          .Deferred()
          .Name("grid")
          .Columns(columns =>
          {
              columns.Bound(x => x.SalesOrderNumber);
              columns.Bound(x => x.CustomerTransactionSettlementType);
              columns.Bound(x => x.ConfirmedShippingDate);
              columns.Bound(x => x.OrderCreationDateTime);
              columns.Bound(x => x.OrderTotalAmount);
              columns.Bound(x => x.SalesOrderOriginCode);
          })
          .HtmlAttributes(new { style = "height: 400px;" })
          .Scrollable()
          .Groupable()
          .Sortable()
          .Pageable(page =>
              page
                  .Refresh(true)
                  .PageSizes(true)
                  .ButtonCount(5)
          )
          .DataSource(source =>
              source
                  .Ajax()
                  .Read(read => read.Action("Orders", "MyAccountApi")
                  )
                  .PageSize(20)

          ))
@(Html.Kendo().Grid())
.递延
.名称(“网格”)
.列(列=>
{
columns.Bound(x=>x.SalesOrderNumber);
columns.Bound(x=>x.CustomerTransactionSettlementType);
columns.Bound(x=>x.ConfirmedShippingDate);
columns.Bound(x=>x.OrderCreationDateTime);
columns.Bound(x=>x.OrderTotalAmount);
columns.Bound(x=>x.SalesOrderOriginCode);
})
.HtmlAttributes(新的{style=“height:400px;”})
.Scrollable()
.Groupable()
.Sortable()
.Pageable(第=>
页
.刷新(真)
.页面大小(真)
.按钮计数(5)
)
.DataSource(source=>
来源
.Ajax()
.Read(Read=>Read.Action(“订单”、“MyAccountApi”)
)
.页面大小(20)
))

注意:以下答案可行,但效果不好,因为它不会将投影推送到动态,因此会下载大量数据。

我偶然发现了答案:

    [Route("orders")]
    public ActionResult Orders([DataSourceRequest] DataSourceRequest request)
    {
        var context = _dynamicsContextFactory.CreateContext();

        var orderHeaders = context.SalesOrderHeadersV2;

        return Json(orderHeaders.ToDataSourceResult(request, x => new OrderHeader()
            {
                OrderCreationDateTime = x.OrderCreationDateTime.DateTime,
                SalesOrderNumber = x.SalesOrderNumber,
                CustomerRequisitionNumber = x.CustomerRequisitionNumber,
                SalesOrderStatus = x.SalesOrderStatus,
                DeliveryAddressLocationId = x.DeliveryAddressLocationId,
                ContactPersonId = x.ContactPersonId,
                OrderTotalAmount = x.OrderTotalAmount,
            }));
    }
或者使用automapper

    [Route("orders")]
    public ActionResult Orders([DataSourceRequest] DataSourceRequest request)
    {
        var context = _dynamicsContextFactory.CreateContext();
        var orderHeaders = context.SalesOrderHeadersV2;
        return Json(orderHeaders.ToDataSourceResult(request, x => x.AutoMap<OrderHeader>()));
    }
[路线(“订单”)]
公共操作结果命令([DataSourceRequest]DataSourceRequest请求)
{
var context=_dynamicContextFactory.CreateContext();
var orderHeaders=context.salesforderheadersv2;
返回Json(orderHeaders.ToDataSourceResult(请求,x=>x.AutoMap());
}
    [Route("orders")]
    public ActionResult Orders([DataSourceRequest] DataSourceRequest request)
    {
        var context = _dynamicsContextFactory.CreateContext();
        var orderHeaders = context.SalesOrderHeadersV2;
        return Json(orderHeaders.ToDataSourceResult(request, x => x.AutoMap<OrderHeader>()));
    }