c# - 如何使用 .skip(i).take(j) 使用 lambda 表达式导航从数据库中获取给定范围的数据行

标签 c# asp.net entity-framework lambda

我正在使用以下代码来获取数据以绑定(bind) gridview,但出于性能问题,我只想获取选定的数据行范围,例如第一页为 1-10,第二页为 11-20 ....我该怎么做修改以下代码

 public IQueryable<Employee> SelectEmployees(string SortColumn, string SortOrder, long UserID,---int start,---int end)
    {
            IUnitOfWork objUow;
            var arg = Expression.Parameter(typeof(Employee), "Employee");
            var sortProperty = Expression.Property(arg, SortColumn);
            var lambda = Expression.Lambda(sortProperty, arg);
            var param = Expression.Parameter(typeof(IQueryable<Employee>));
            var orderByCall = Expression.Call(typeof(Queryable), SortOrder, new Type[] { typeof(Employee), sortProperty.Type }, new Expression[] { param, lambda });
            var orderLambda = Expression.Lambda<Func<IQueryable<Employee>, IQueryable<Employee>>>(orderByCall, param).Compile();
            var Ids = objUow.Repository<Users>().Entities.Where((x => x.ID == UserID)).Select(y => y.Id);
            return orderLambda(objUow.Repository<Employee>().Entities.Where(x => x.IsDeleted != true && x.Status == 1 && Ids.Contains(x.CheckID)));
   }

我试过 skip().take() 但它返回错误。 ...

 return orderLambda((objUow.Repository<Employee>().Entities.Where(x => x.IsDeleted != true && x.Status == 1 && Ids.Contains(x.CheckID))).Skip(0).Take(10));

EntityFramework.SqlServer.dll 中发生了“System.NotSupportedException”类型的异常,但未在用户代码中处理

附加信息:“Skip”方法仅支持 LINQ to Entities 中的排序输入。方法 'OrderBy' 必须在方法 'Skip' 之前调用。

我可以做类似下面的事情吗

 IQueryable<Employee> Obj= orderLambda(objUow.Repository<Employee>().Entities.Where(x => x.IsDeleted != true && x.InvalidStatus == 1 && shopids.Contains(x.CheckID)));
           Obj.Skip(0).Take(10);

最佳答案

您需要知道每次查询数据库时要跳过多少条记录。 为此,您应该将页码乘以页面大小。 这是一个例子:

int skipAmount = pageNumber * pageSize;
_repository.Where(a => a.IsDeleted != false)
   .OrderBy(a => a.Date)
      .Skip(skipAmount)
         .Take(pageSize);

关于c# - 如何使用 .skip(i).take(j) 使用 lambda 表达式导航从数据库中获取给定范围的数据行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25905691/

相关文章:

asp.net - 当 HttpModule 中抛出异常时 ASP.NET MVC 中的自定义错误消息

c# - 使用 InProc session 管理的并发 ASP.NET 请求

entity-framework - EF Code First 多个实体到同一个表

c# - 使用 SQL Server、EF6 保存静态列表的最佳方法

c# - 在多线程应用程序中使用 MessageBox 显示异常信息

c# - 如何在 Filemaker 数据库中通过 ODBC 查询布局

c# - 在虚拟机上获取 CPU ID

C# DataGridView 捕获删除的行

c# - 类库项目中的扩展方法

c# - 我可以让 2 个不同的 Entity Framework 上下文共享一个 Sql Server Compact 数据库吗?