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
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

55

56

72

73

128

129

138

139

199
