表达式必须以from开头,以select或者group结尾

1
2
3
from item in 遍历对象 ...
where 筛选条件
select.../group...

常用查询操作符

演示用数据

1
2
3
4
5
6
7
8
9
10
List<Person> persons = new List<Person>()  
{
new Person(21, "tom", "男"),
new Person(30, "tom2", "女"),
new Person(100, "tom3", "男"),
new Person(232, "tom4", "男"),
new Person(234, "tom5", "女"),
new Person(231, "tom6", "女"),
new Person(444, "tom7", "男")
};

筛选

查询集合内ID大于200的数据

1
var list = from p in persons where p.ID > 200 select p;

排序

1
var list = from p in persons where p.ID > 200 orderby p.ID select p;

分组

group 子句用于对根据您指定的键所获得的结果进行分组。
根据男女进行分组

1
2
3
var list = from p in persons  
where p.ID > 200
group p by p.Age;


对筛选出来的数据进一步筛选

1
2
3
4
5
6
7
8
9
var list = from p in persons  
where p.ID > 200
group p by p.Age
into pg
select new
{
key = pg.Key,
maxId = pg.Max(t => t.ID)
};


into关键字创建进一步查询的标识,用select子句创建了一个带key和maxId属性的匿名类型,在男女的数据中id大于200的数据进一步筛选出,男女各自最大的id。
select new构造一个新的数据返回

连接

数据

1
2
3
4
5
6
7
8
9
10
List<Person> persons = new List<Person>()  
{
new Person(21, "tom", "男", "1"),
new Person(30, "tom2", "女", "3"),
new Person(100, "tom3", "男", "4"),
new Person(232, "tom4", "男", "1"),
new Person(234, "tom5", "女", "2"),
new Person(231, "tom6", "女", "66"),
new Person(444, "tom7", "男", "1")
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
List<lesson> lessonList = new List<lesson>()  
{
new lesson()
{
Id = "1",
ClassName = "高数"
},
new lesson()
{
Id = "2",
ClassName = "毛概"
}
};
var list = from p in persons
join c in lessonList
on p.lessonId equals c.Id
select new
{
Name = p.Name,
ClassName = c.ClassName
};


和sql语句的连接查询类似

合并

1
2
3
var list1 = from p1 in persons where p1.ID > 200 select p1;  
var list2 = from p2 in persons where p2.ID > 200 select p2;
var list = list1.Zip(list2, (frist, second) => frist.Name + "," + second.Name);

分页

1
2
3
int pageSize = 5;  
int pageIdx = 0;
var list = (from p in persons where p.ID > 0 select p).Skip(pageIdx * pageSize).Take(pageSize);

扩展方法Take()和Skip() 等的分区操作用于分页。使用时把扩展方法take、skip添加到查询的最后,skip方法会忽略根据页面大小和实际页数计算出的项数,再使用take方法根据页面大小提取一定数量的项