用LINQ实现分页控件的困惑!
在LINQ中,IQueryable<T>接口和IEnumerable<T>接口都分别提供了Skip方法和Take方法,用来做分页非常合适.因此我就想用他们做一个分页控件,使用的时候只需提供数据源、GridView的ID、每页大小和起始页标即可.现在问题就出了在数据源上,要求用户提供一个什么类型的数据源呢,DataSet? 这样就失去了LINQ的意义.IQueryable<T>接口和IEnumerable<T>接口? T是可确定类型(已知类型)的话还可以,若T是匿名类型,如var names = from name in T.Customer
where name.NameID > 20
order by name.NameID
select new {CName = name.Name,CNameID = name.NameID};
怎么在分页控件中保存数据源呢?即怎么在分页控件中保存names呢?
一直很困惑,渴望得到大家的帮助,先谢谢了! --------------------编程问答-------------------- 在线等待 --------------------编程问答-------------------- IQueryable <T> 是继承自 IEnumerable <T> 的。因此使用接口仅需要针对后者就可以了。 --------------------编程问答--------------------
不太容易理解你问的问题是什么。
如果你已经假设name的逻辑,那么你应该用代码来说明这种逻辑。对于泛型,就是要加上约束。例如你的类型定义为:
public class MyControl<T> : DataPager where T:INamed //INamed是你自己定义的接口描述那些有name属性的对象类
{
public IEnumerable <T> theDataSource{get; set;}
......
} --------------------编程问答-------------------- 顶我的编程网吧
www.kingofcoders.com
编程王网站, N多文章 --------------------编程问答-------------------- 我的问题是:我写好了一个分页的用户控件Pager,使用的时候要求用户提供数据源、GridView的ID、每页大小和起始页标,后三项(GridView的ID、每页大小和起始页标)都很简单,就不说了.但就数据源这一问题,我一直很苦恼,我怎么保存用户提供的数据源呢?比如说,用户的数据源为
var names = from name in T.Customer
where name.NameID > 20
order by name.NameID
select new {CName = name.Name,CNameID = name.NameID};
names,一个匿名类型,怎么在分页控件中保存数据源呢?即怎么在分页控件中保存names呢? 做数据分页的时候我要使用names.
请指点,谢谢!
--------------------编程问答-------------------- 着急啊,请大家多多帮忙,先谢谢了! --------------------编程问答-------------------- 以下是我在一个人力资源系统中使用asppager控件的的分页查询方法:
//根据条件取得符合条件的数据
var result= from e in this.Ctx.Employees where (e.Status == EmployeeStatus.在职 && e.Deleted == false) select e;
//进行分页
// query.PageIndex 当前页码
//query.PageSize 每页显示的条数
var result = result.Skip((query.PageIndex - 1) * query.PageSize).Take(query.PageSize);
完了· --------------------编程问答-------------------- to NeuMik:
谢谢你的示例,虽然并非我所想要的.
我困惑就困惑在怎么保存你所说的result上.
是先写好了一个分页控件,然后再使用,不是在一个页面下.问题就是怎么保存别人提供过来的result.
继续等待中…… --------------------编程问答-------------------- to NeuMik:
谢谢你的示例,虽然并非我所想要的.
我困惑就困惑在怎么保存你所说的result上.
是先写好了一个分页控件,然后再使用,不是在一个页面下.问题就是怎么保存别人提供过来的result.
继续等待中…… --------------------编程问答-------------------- 那位大哥能给写一个基于LINQ的分页控件则更佳,谢谢了!呵呵!要求提供源代码! --------------------编程问答-------------------- 不知道对你的说法理解的对不对,你是根据条件把所有的数据一下子取出来,作为数据源提供给分页控件保存的!
我想问你了,如果数据量是几百万或者更大,你这样做好吗?
不好意思,可能我理解错了!
不要见怪! --------------------编程问答-------------------- 关注中... ... --------------------编程问答-------------------- http://www.dazhixiao.cn/huati/asp.net/3600.html
我用LINQ做的简单分页用户控件。不知道能否帮上你的忙 --------------------编程问答-------------------- public class Type
{
string CName;
int CNameID;
}
var names = from name in T.Customer
where name.NameID > 20
order by name.NameID
select new Type
{
CName = name.Name,
CNameID = name.NameID
};
--------------------编程问答-------------------- 回帖是美德 --------------------编程问答--------------------
14楼正解
多加一句 List<Type> Type = names.ToList();
--------------------编程问答-------------------- 我也想遇到这个问题了!我补充一下问题 --------------------编程问答-------------------- 我也想遇到这个问题了!我补充一下问题:
例如:
gridview1.datasoure=from q in db.student select q;
gridview1.databind();
以上就可以直接把linq查询出来的数据源赋给gridview1.datasoure
但是我不知道怎么通过一个中间的变量保存我用linq查询出来的数据源,然后在把数据源赋给gridview1.datasoure。
如果高手知道请指教啊
qq:332453759
--------------------编程问答-------------------- IQueryable<XXX> FindAll()
{
}
XXX为一个实体类,你可以在实体类里定义FingAll方法里需要用的字段 --------------------编程问答-------------------- http://www.cnblogs.com/ejiyuan/archive/2009/12/22/1629806.html --------------------编程问答-------------------- 顶 --------------------编程问答--------------------
--------------------编程问答-------------------- 如果实在需要将“数据源”保存,应该Save一个Compile好的查询。因为LinqToSQL使用延时加载,
public IList<Model.Customer> GetCustomers(Query query)
{ IQueryable<Model.Customer> customers = FindCustomers();
//排序及分页
return customers .OrderBy(t => t.NameID).Skip(query.PageIndex * query.PageSize).Take(query.PageSize).ToList();
}
public IQueryable<Model.Customer> FindCustomers()
{
return from c in T.Customer
where c.NameID > 20
order by c.NameID
select new Model.Customer//Model层的Customer不同于数据实体
{
CName = c.Name,
CNameID = c.NameID
};
}
执行完
var names = from n1 in x
where ...
select new {
CName=n1.name,
CC = n1.cc
};
后,names中仍未包含实际数据,所以将这个names“IQueryable”实例Compile一下,直接存放就可以了。
除非提供的接口是接收一个IList,IEnumerable等接口。
--------------------编程问答-------------------- 我现在也要用LINQ实现分页,在GridView控件中,怎样获得他的当前页呢?数据源是手动绑定的。
补充:.NET技术 , LINQ