我想使用[DataSourceRequest] DataSourceRequest requestToDataSourceResult实现服务器端分页/排序/等

我已经使用LINQ和EF完成了数百次,但是,当前项目需要我们利用context.Database.SqlQuery调用的存储过程

除了在我也需要将参数传递到存储过程的情况下,这会导致错误:



我认为这样做的原因是Kendo的ToDataSourceResult也在尝试将SQL参数附加到C#不喜欢的data对象。

我在网上看到的一些解决方案是调用.ToList(),该方法确实有效,但是,它在某种程度上失败了,因为它仍然会查询所有结果。

var data = context.Database.SqlQuery<TicketVm>("usp_FleetRentedEquipments @analyst",
                                               new SqlParameter("@analyst", analyst));
return data.ToDataSourceResult(request);

最佳答案

在ToDataSourceResult方法内部,该查询至少使用两次-一次调用Count(),一次提取数据。这将导致两次使用SQL参数集的错误。您可能只能这样做:

var data = context.Database.SqlQuery<TicketVm>($"usp_FleetRentedEquipments {analyst}");
return data.ToDataSourceResult(request);

并且要非常小心,“分析”不是SQL注入(inject)。

10-05 22:58