C# 剑道分页与Linq到SQL类,查询所有数据非常慢
我正在使用带有“linq到sql类”的剑道网格 C#Linq查询:C# 剑道分页与Linq到SQL类,查询所有数据非常慢,c#,sql-server,linq,linq-to-sql,kendo-grid,C#,Sql Server,Linq,Linq To Sql,Kendo Grid,我正在使用带有“linq到sql类”的剑道网格 C#Linq查询: public DataSourceResult GetCustomer(Kendo.Mvc.UI.DataSourceRequest request) { return new DataLayer.MainDataContext().Customer() .Where(x => x.IsActive) .ToList().ToDataSourc
public DataSourceResult GetCustomer(Kendo.Mvc.UI.DataSourceRequest request)
{
return new DataLayer.MainDataContext().Customer()
.Where(x => x.IsActive)
.ToList().ToDataSourceResult(request);
}
假设客户活动数据为100万,则上述代码将获取100万数据,然后转换为ToDataSourceResult(来自“请求”)。事实上,结果是正确的。因为此查询显示来自“请求”(DataSourceRequest)的10个数据。但在这个过程中是错误的,因为在后台查询中先获取100万数据,然后转换为ToDataSourceResult。因此,我的应用程序显示数据的速度非常慢
然后我要更改我的代码:
public DataSourceResult GetCustomer(Kendo.Mvc.UI.DataSourceRequest request)
{
return new DataLayer.MainDataContext().Customer()
.Where(x => x.IsActive)
.Skip((request.Page - 1) * request.PageSize)
.ToList().ToDataSourceResult(request);
}
结果显示数据非常快,因为查询需要10行数据。
但问题是:
(1) 网格仅在右下角“10项中的1-10项”中显示结果,但有100万项(数据行)。
(2) 总分页仅“第1页”,不存在第2、3和下一页。您可以在返回的DataSourceResult上设置总分页。我知道这已经很晚了,但问题是您正在调用.ToList(),它对数据库执行查询,然后将结果转换为DataSourceResult。(我今天也有同样的问题。) 正确的方法是这样的:
public DataSourceResult GetCustomer(Kendo.Mvc.UI.DataSourceRequest request)
{
return new DataLayer.MainDataContext().Customer()
.Where(x => x.IsActive)
.ToDataSourceResult(request);
}
扩展方法使用操作的请求参数中指定的排序、筛选器和页面执行查询。无法执行。如果在返回的DataSourceResult上设置总计,网格筛选器将不起作用。我试过了。