Linq通用分页类的实现,可返回匿名类型

      前两天因为项目需要,接触到了Linq to Entities,打算写个通用的分页类。如果是用实体类型来做返回类型的话,是很简单的,但是当使用了join之类的多表查询后,返回的却是一个匿名类型。怎么放也放不进我写的通用分页类里,我尝试把匿名类型转换为Object,就是,把System.Linq.IQueryable<匿名类型>强制转换为System.Linq.IQueryable<Object>会报错说不能转换的,后来,用System.Linq.IQueryable<匿名类型>.Cast<object>()这个方法,尝试转为System.Linq.IQueryable<Object>,的确转成功了,但是,更郁闷的问题又出现了,
当ToList()的时候,又提示我“匿名类型转Object错误了”,晕...折腾了一天,终于搞出一个通用的分页类。以下是源码。
       本人第一次写文章,表达能力和写作能力都不太好,此代码的确是比较简单,希望高手们不要见笑...谢谢。
  1        private void Form1_Load(object sender, EventArgs e)
  2        {
  3            Northwind db = new Northwind();          
  4
  5            //创建查询语句
  6            var query = (from t1 in db.exClass
  7                     join t2 in db.exClassCon                     
  8                     on t1.ClassID equals t2.ClassID into it2
  9                     orderby t1.ClassID descending
 10                     select new
 11                     {
 12                         t1,
 13                         count = it2.Count()
 14                     }
);
 15
 16            //实例化对象
 17            var datalist = DataList<object>.Create(query,               //查询语句
 18                new { t1 = (exClass)null, count = 0 },                  //定义一个相同结构的匿名空类
 19                15);                                                  //页码和每页大小
 20            
 21            dataGridView1.DataSource = datalist.Value;
 22
 23            MessageBox.Show("当前页:" + datalist.IndexPage.ToString() + "\r\n" +
 24                "最大页:" + datalist.PageCount.ToString() + "\r\n" +
 25                "当前记录数:" + datalist.ThisPageRecordCount.ToString() + "\r\n" +
 26                "总记录数:" + datalist.AllRecordCount.ToString() + "\r\n" +
 27                "第一页:" + datalist.CanFirstPage.ToString() + "\r\n" +
 28                "上一页:" + datalist.CanPrevPage.ToString() + "\r\n" +
 29                "下一页:" + datalist.CanNextPage.ToString() + "\r\n" +
 30                "最后一页:" + datalist.CanLastPage.ToString() + "\r\n");
 31
 32        }

 33
 34        /// <summary>
 35        /// 数据列表
 36        /// </summary>
 37        /// <typeparam name="T">类型</typeparam>

 38        public class DataList<T> : IEnumerable
 39        {
 40            成员变量
 55
 56            构造函数
 72
 73            属性
128
129            索引器
138
139            公开方法
199        }
posted @ 2009-09-07 17:28  Richard Law  阅读(3111)  评论(2)    收藏  举报