加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

linq-to-sql – 用于排序和分页的LINQ to SQL扩展方法

发布时间:2020-12-12 07:26:26 所属栏目:MsSql教程 来源:网络整理
导读:我找到了一个处理 LINQ的排序和分页的扩展方法.虽然这很好用,但我试图看看是否有其他方法可以使用它. 目前,extension method的代码如下: public static IQueryableT PageT,TResult( this IQueryableT obj,int page,int pageSize,System.Linq.Expressions.Exp
我找到了一个处理 LINQ的排序和分页的扩展方法.虽然这很好用,但我试图看看是否有其他方法可以使用它.

目前,extension method的代码如下:

public static IQueryable<T> Page<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();

    int innerRows = (page - 1) * pageSize;

    if (asc)
        return obj.OrderBy(keySelector).Skip(innerRows).Take(pageSize).AsQueryable();
    else
        return obj.OrderByDescending(keySelector).Skip(innerRows).Take(pageSize).AsQueryable();
}

该方法接受一个基于类型的表达式.

在我的Dealer类中,我有一个方法GetDealers,它基本上调用了这个,

db.User.Page(1,2,p => p.User.UserProperty.Name,true,out rowCount)

然而,从事物的呈现方面来看,我不知道或可以访问上述表达,例如,

ListView1.DataSource = users.GetDealers("SortColumn",pageNo,pageSize,out rowCount,bool asc);
ListView1.DataBind();

唯一的方法是在我的GetDealers方法中有一个switch语句,然后转换为表达式.有没有办法绕过这个,或者这个方法好吗?

解决方法

我不确定你在问什么,但我相信这是我对自己的看法.如果您想知道如何基于字符串动态排序结果,而不是正确的LINQ表达式,那么您很幸运.

Scott Guthrie在这个主题上发表了一篇很棒的article.它引用了一个Microsoft文件,它扩展了任何IQueryable对象以支持动态排序.
C# Dynamic Query Library (included in the LinqSamplesDynamicQuery directory).只需将页面添加到App_Code文件夹并在项目中包含“Using System.Linq.Dynamic”,您就可以使用以下语法:

myUsers = myUsers.OrderBy("LastName");

我希望这有帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读