我需要从数据库中获取大约40000行并绑定到gridview,然后此数据需要导出到excel和PDF。 当我使用简单的绑定过程绑定行时,大约需要5到6分钟的薄荷糖。 因此,我编写了一个用于自定义分页的存储过程。 我遵循的程序如下。 结束 当我执行存储过程时,则显示以下错误 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我收到此错误:
处理请求时发生未处理的异常。
NotImplementedException:方法或操作未实现。
PaginatedList.cs 中的 Portal.Models.PaginatedList.CreateAsync(object p, int v, int pageSize),第 47 行
Controller:
public async Task<IActionResult> Index(string sortOrder,
string currentFilter,
string searchString,
int? pageNumber)
{
List<StudentViewModal> listOfStudents = new List<StudentViewModal>();
DataTable dataTable = new DataTable();
using (SqlConnection sqlConnection = new SqlConnection(_configuration.GetConnectionString("SCHOOL")))
{
sqlConnection.Open();
SqlDataAdapter sqlDa = new SqlDataAdapter("proc_GetStudents", sqlConnection);
sqlDa.SelectCommand.CommandType = CommandType.StoredProcedure;
sqlDa.Fill(dataTable);
foreach (DataRow dr in dataTable.Rows)
{
listOfStudents.Add(
new StudentViewModal
{
ID = Convert.ToInt32(dr["ID"]),
Name = Convert.ToString(dr["Name"]),
});
}
}
int pageSize = 3;
return View(await PaginatedList<StudentViewModal>.CreateAsync(listOfStudents, pageNumber ?? 1, pageSize));
}
这是分页助手 class:
namespace Portal.Models.Referral
{
public class PaginatedList<T> : List<T>
{
public int PageIndex { get; private set; }
public int TotalPages { get; private set; }
public PaginatedList(List<T> items, int count, int pageIndex, int pageSize)
{
PageIndex = pageIndex;
TotalPages = (int)Math.Ceiling(count / (double)pageSize);
this.AddRange(items);
}
public bool HasPreviousPage
{
get
{
return (PageIndex > 1);
}
}
public bool HasNextPage
{
get
{
return (PageIndex < TotalPages);
}
}
public static async Task<PaginatedList<T>> CreateAsync(IQueryable<T> source, int pageIndex, int pageSize)
{
var count = await source.CountAsync();
var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
return new PaginatedList<T>(items, count, pageIndex, pageSize);
}
internal static Task<object> CreateAsync(object p, int v, int pageSize)
{
throw new NotImplementedException();
}
}
}
internal static Task<object> CreateAsync(object p, int v, int pageSize)
被调用而不是
public static async Task<PaginatedList<T>> CreateAsync(IQueryable<T> source, int pageIndex, int pageSize)
因为每个参数都匹配“object p”,包括 IQueryable 类型的参数
您必须使参数 p 更具体或实际实现该方法。
更多详情:
这是导致您的问题的原因:
throw new NotImplementedException();
如果您实现(编写实际的功能代码)您的错误将 go 消失。
但为什么它会在代码中达到最高点(第 47 行)
原因是 List listOfStudents 也是一个 object 类型,因为 C# 中的所有内容都扩展了 object。 所以这意味着
CreateAsync(listOfStudents, pageNumber ?? 1, pageSize)
匹配的签名
internal static Task<object> CreateAsync(object p, int v, int pageSize)
{
throw new NotImplementedException();
}
它被调用并抛出 NotImplementedException。
Asp.net 核心分页与实体框架一起查询数据库并仅返回某些数据。 由于运行存储过程返回所有数据,因此分页不再有用,因为所有可能不需要的数据都已经到达。 我们进行分页的原因之一是减少时间而不是获取现在不需要的额外数据。 如果我们喜欢在视图中进行分页,那么我们可以使用 JavaScript 库。 否则需要在存储过程中进行分页,或者如果我们希望 Asp.net 内核为我们进行分页,那么我们需要切换到实体框架并在 ZD7EFA19FBE7D3972FD5ADB6024223D7 中使用 LINQ 查询
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.