c#提供的ling查询极大的遍历了集合的查询过程,且使用简单方便,非常的有用。
下面将分别用简单的例子说明:ling基本查询、延迟查询属性、类型筛选、复合from字句、多级排序、分组查询、联合查询、合并、分页、聚合操作符、并行linq、取消长时间运行的并行ling查询。
Lambda表达式简介:
/*Lambda表达式:Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数 表达式位于 => 运算符右侧的 lambda 表达式称为“表达式 lambda”。 * (input parameters) => expression * 示例:*/ delegate int del(int i); static void Main(string[] args) { del myDelegate = x => x * x; int j = myDelegate(5); //最后j = 25 }
- 基本查询
语句:
var query = from r in listStudents where r.score < 60 orderby r.score descending select r; //var q2 = listStudents.Where(r => r.score < 60).OrderByDescending(r => r.score).Select(r => r) ;//或使用Lambda表达式
例子:
/// <summary> /// 学生结构体 /// </summary> struct Student { /// <summary> /// 姓名 /// </summary> public string name; /// <summary> /// 年龄 /// </summary> public int age; /// <summary> /// 班号 /// </summary> public int grade; /// <summary> /// 分数 /// </summary> public float score; } /// <summary> /// linq /// 基本查询 /// </summary> static void Linq1() { #region 构造查询数据 List<Student> listStudents = new List<Student>(); Random pRandom = new Random(); for (int i = 1; i < 50; i++) { float sc = pRandom.Next(0, 100); int age = pRandom.Next(8, 13); int gde = pRandom.Next(1, 6); string name = ""; switch (pRandom.Next(0, 6)) { case 1: name = "周xxx"; break; case 2: name = "李xxx"; break; case 3: name = "孙xxx"; break; case 4: name = "钱xxx"; break; default: name = "赵xxx"; break; } Student psdt = new Student(); psdt.name = name; psdt.age = age; psdt.grade = gde; psdt.score = sc; listStudents.Add(psdt); } #endregion //从50个学生中选择出不及格的人员名单并按分数降序排列 var query = from r in listStudents where r.score < 60 orderby r.score descending select r; //var q2 = listStudents.Where(r => r.score < 60).OrderByDescending(r => r.score).Select(r => r) ;//或使用Lambda表达式 //orderby升序即从小到大,orderby r.score descending降序即从大到小 Console.WriteLine("不及格的人员名单:"); foreach (Student st in query) { Console.WriteLine("***************"); Console.WriteLine("姓名:"+st.name); Console.WriteLine("班级:"+st.grade); Console.WriteLine("年龄:"+st.age); Console.WriteLine("分数:"+st.score); } Console.ReadKey(); }