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 > 200select p;
排序
1
var list = from p in persons where p.ID > 200orderby 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 selectnew { key = pg.Key, maxId = pg.Max(t => t.ID) };
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 selectnew { Name = p.Name, ClassName = c.ClassName };
和sql语句的连接查询类似
合并
1 2 3
var list1 = from p1 in persons where p1.ID > 200select p1; var list2 = from p2 in persons where p2.ID > 200select 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 > 0select p).Skip(pageIdx * pageSize).Take(pageSize);