首页 新闻 会员 周边

Linq联接查询和分页问题

0
悬赏园豆:20 [已解决问题] 解决于 2011-06-17 13:13

Linq有两种写法,一种是用表达式,一种用扩展方法,现在的问题是要联接查询的同时进行分页。

用表达式写法联接查询比较方便,但不知道如何分页,用扩展方法好分页但联接查询不知道怎么写,大家能不能指点一下,给个示例,谢谢!

乱世文章的主页 乱世文章 | 初学一级 | 园豆:147
提问于:2011-05-19 11:43
< >
分享
最佳答案
0

给你个例子,在EF里面最好先建立个视图view,效率高,然后针对view进行分页,排序...

public virtual Permissions GetPermissionsByRoleQueryable(Int32 roleID, Nullable<Int32> page, Int32 pageSize, string orderProperty, bool ASC)
       {
            IQueryable<Permission> query =  GetPermissionsByRole(roleID).AsQueryable<Permission>();
           
            if (false == string.IsNullOrEmpty(orderProperty))
            {
                switch(orderProperty)
                {
                    case "ID":
                    if (true == ASC)  query = query.OrderBy(P => P.ID);
                    else  query = query.OrderByDescending(P => P.ID);
                    break;
                    case "Name":
                    if (true == ASC) query = query.OrderBy(P => P.Name);
                    else
                    query = query.OrderByDescending(P => P.Name);
                    break;
                    default:
                    break;
                }
            }
    
            if (pageSize > 0)
            {
                query = query.Skip((page ?? 0) * pageSize).Take(pageSize);
            }
           
            return new Permissions(query);
       }

收获园豆:20
胡以谦 | 菜鸟二级 |园豆:235 | 2011-05-20 10:33
其他回答(3)
0

其实如果实在不知道,你完全可以先联接查询,然后再进行分页,

比如 var query = from a1 in atable

                           join b1 in btable on a1.xx equals b1.xx

                           select new ...;

var result = query.skip(2).take(2);

说到底我也不会。因为在gridview分页的时候我都用系统自带的分页功能。

mywork | 园豆:475 (菜鸟二级) | 2011-05-19 12:41
0
(from xxxxxxxxxxxxx
select new {字段}).Skip(start).Take(limit);

 

Y2zz | 园豆:393 (菜鸟二级) | 2011-05-19 17:02
0

Linq有两种写法,一种是用LAMDA表达式,一种用标准表达式

Tim_ | 园豆:224 (菜鸟二级) | 2011-06-17 13:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册