代码改变世界

C#3.0(六)-Linq to object(3)查询方法操作集合

2011-04-04 19:02  杨延成  阅读(550)  评论(0编辑  收藏  举报
Linq中的查询方法的使用,看代码吧!
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5
6namespace TestLinQ2
7{
8 class Student
9 {
10 public string Name
11 {
12 set;
13 get;
14 }
15 public int ID
16 {
17 set;
18 get;
19 }
20 }
21
22/// 通过使用 C# 3.0 中引入的声明性查询语法,
23/// 介绍性 LINQ 文档中的多数查询都被编写为查询表达式。
24/// 但是,.NET 公共语言运行库 (CLR) 本身并不具有查询语法的概念。
25/// 因此,在编译时,查询表达式会转换为 CLR 确实了解的内容:方法调用。
26/// 这些方法称为“标准查询运算符”,
27/// 它们具有如下名称:Where、Select、GroupBy、Join、Max、Average 等。
28/// 可以通过使用方法语法而非查询语法直接调用这些方法。
29
30///通常建议使用查询语法,因为它通常更简单、更易读;
31///但是方法语法和查询语法之间并无语义上的区别。
32///此外,一些查询(如检索匹配指定条件的元素数的那些查询
33///或检索具有源序列中的最大值的元素的查询)只能表示为方法调用。
34///System.Linq 命名空间中的标准查询运算符的参考文档通常使用方法语法。
35///因此,即使在开始编写 LINQ 查询时,
36///熟悉如何在查询和查询表达式本身中使用方法语法也非常有用。
37
38
39 class Program
40{
41 static void Main(string[] args)
42{
43///List集合测试
44List<Student> students = new List<Student> ...{
45 new Student...{Name=\"黄老邪\",ID=1},
46 new Student...{Name=\"洪七公\",ID=2},
47 new Student...{Name=\"一灯大师\",ID=2},
48 new Student...{Name=\"欧阳峰\",ID=3}
49 };
50
51///这段查询语句的语义是:
52 ///在students中查询姓名为:\"黄老邪\"的学生
53 ///注意返回值s是也是一个集合,他包含多个对象,虽然此查询语句只包含一个
54
55 //var s = students
56 // .Where(student => student.Name.Equals(\"黄老邪\"))
57 // .Select(student => student);
58
59 //Console.WriteLine(s.First().Name);
60
61///返回多个元素,并排序
62 ///查询方法的参数均采用Lambda表达式 ,
63 ///关于这个参看:http://www.ytcode.com/showtopic-334.aspx
64 ///此查询学员的姓名,并非返回学员对象,反回为字符串集合
65 ///看下面采用枚举器遍历就应该理解了
66 var s = students
67 .Where(student => student.ID > 1)
68 //.OrderBy(student=>student.ID)
69 .OrderByDescending(student => student.ID)
70 //.ThenBy(student=>student.Name) //先按ID排序,然后再按改名降序
71 .ThenByDescending(student=>student.Name)
72 .Select(student => student.Name);
73
74///采用枚举器遍历
75 //IEnumerator ie=s.GetEnumerator();
76 //while (ie.MoveNext())
77//{
78 // Console.WriteLine(ie.Current);
79 //}
80
81 foreach (var sname in s)
82{
83 Console.WriteLine(sname);
84 }
85
86#region 聚合演示
87//选择最大的学员ID
88
89 //var sid = students
90 // .Max(student => student.ID);
91
92 //Console.WriteLine(sid);
93
94///选择学员ID的和,这个只是演示,无任何意义
95
96 //var sum = students
97 // .Sum(student => student.ID);
98 //Console.WriteLine(sum);
99///还有Min,Average,.Count,.Distinct
100 #endregion
101
102
103
104 }
105 }
106}