繁体   English   中英

使用实体框架在ListView中进行分页

[英]Paging in ListView with Entity Framework

我正在使用实体框架在Listview进行分页,并且在单击下一个/上一个按钮后传递startindexmaxrows时卡住了

这是我的代码

private  List<WorkItem> Data(int startindex, int maxrows)
{            
       return (from x in ss.WorkItem
                    select x).OrderBy(p => p.WorkItemID).Skip(startindex).Take(maxrows).ToList();

}

protected void lvWorkItems_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
{
        this.DataPager1.SetPageProperties(e.StartRowIndex, e.MaximumRows, false);
        lvWorkItems.DataSource = Data(e.StartRowIndex,e.MaximumRows);

        lvWorkItems.DataBind();
}

我的问题是当我点击下一个/上一个按钮时如何传递startindexmaxrows 请帮忙

请查看它,它的扩展方法:

 public static IQueryable<T> MyPage<T, TResult>(this IQueryable<T> obj, int    
 page,     int  pageSize, System.Linq.Expressions.Expression<Func<T, TResult>>  
 keySelector, bool asc, out int rowsCount)
 {
    rowsCount = obj.Count();
   if (asc)
    {
       return obj.OrderBy(keySelector).Skip(page * pageSize).Take(pageSize);
    }
   else
   {
       return obj.OrderByDescending(keySelector).Skip(page * pageSize).Take(pageSize);
   }        
}

这也是我的问题。

但我的问题是通过改变业务输出类方法的结构来解决的。

当然,通过这种方式,您需要拥有数据输出和行数。

并且不要忘记必须从数据库中提取与相同页面布局数据相关的问题。

我的班级设计用于执行以下操作。

using System.Collections.Generic;

using System.Linq;

using Andish.CSS.Common.Enum;

using AutoMapper;

using system.linq.dynamic;


namespace Andish.CSS.Common.Result.Implementation

{

   public static class PagingResult

    {

        public static PageResult<K> ToPageResult<T, K>(this IQueryable<T> queryable, int rowCount,
            int pageNumber, string sortField, DynamicLinqSortFieldKind 

dynamicLinqSortFieldKind)

        {

var allQueryRow = queryable.ToList<T>().Count();

            var skipLen = (pageNumber - 1) * rowCount;


            string orderKind = "";

            orderKind = dynamicLinqSortFieldKind == DynamicLinqSortFieldKind.Ascending ? " Asc" : " Desc";

 PageResult<K> pageResult = new PageResult<K>

                                           {

                                               PageNumber = pageNumber,

                                               RowCount = rowCount,

                                               Result = Mapper.Map<IList<K>>(queryable.OrderBy(sortField + orderKind)
                                                                             .Skip(skipLen).Take(rowCount).ToList<T>()),
                                               ResultRowCount = allQueryRow,

                                               PageCount = allQueryRow % rowCount == 0 ? allQueryRow / rowCount : (allQueryRow / rowCount) + 1

                                           };

            return pageResult;


        }

 }



}

create this enum

public enum DynamicLinqSortFieldKind

    {

        Ascending = 0,

        Descending = 1

    }

并且为了使用这个扩展方法就像这样,我有一个来自类ExecutiveUnit的结果,我希望将这个类映射到类ExecutiveUnitModel。 我使用automapper nuget。

var xresult = result.ToPageResult<ExecutiveUnit, ExecutiveUnitModel>(RowNumbers, pageNumber, "Code", DynamicLinqSortFieldKind.Ascending);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM