Linq通用分页类的实现,可返回匿名类型
前两天因为项目需要,接触到了Linq to Entities,打算写个通用的分页类。如果是用实体类型来做返回类型的话,是很简单的,但是当使用了join之类的多表查询后,返回的却是一个匿名类型。怎么放也放不进我写的通用分页类里,我尝试把匿名类型转换为Object,就是,把System.Linq.IQueryable<匿名类型>强制转换为System.Linq.IQueryable<Object>会报错说不能转换的,后来,用System.Linq.IQueryable<匿名类型>.Cast<object>()这个方法,尝试转为System.Linq.IQueryable<Object>,的确转成功了,但是,更郁闷的问题又出现了,
当ToList()的时候,又提示我“匿名类型转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
1, 5); //页码和每页大小
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
}
private void Form1_Load(object sender, EventArgs e)2
{3
Northwind db = new Northwind(); 4

5
//创建查询语句6
var query = (from t1 in db.exClass7
join t2 in db.exClassCon 8
on t1.ClassID equals t2.ClassID into it29
orderby t1.ClassID descending10
select new11
{12
t1,13
count = it2.Count()14
});15

16
//实例化对象17
var datalist = DataList<object>.Create(query, //查询语句18
new { t1 = (exClass)null, count = 0 }, //定义一个相同结构的匿名空类19
1, 5); //页码和每页大小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> : IEnumerable39
{40
成员变量55

56
构造函数72

73
属性128

129
索引器138

139
公开方法199
}

浙公网安备 33010602011771号