LinQ to Object
今天我们学习了很多内容,不过全是基础,所以听起来不怎么费力呢
今天的练习主要写了:
排列:orderby orderbydescending (升序降序) thenby thenbydescending(当需要用thenby排序时,必须要有orderby的参与)
聚合:count ,avg,max,min(今天主要举这些例子了)
集合:交集(intersect),并集(union),差集(Except),(distinct)移除重复项
元素操作:
ElementAt :按索引返回某一个元素(不懂这个)
ElementAtOrDefault:按索引返回某一个元素,如果没有的话,就返回默认值
First:返回集合中的每一个元素或满足条件的第一个元素
FirstOfDefault:返回集合中的每一个元素或满足条件的第一个元素,如果不存在,就返回默认值
Single:返回集合中的唯一元素或者是满足条件的某个元素
SingleOfDefault:返回集合中的唯一元素或者是满足条件的某个元素,如果不存在,返回默认值
分区函数:
Skip:跳过(输出后面的元素)
Take:取
SkipWhile:只要不满足条件就停止跳过
TakeWhile:(这个不知道怎么说,明天懂了在说哈)
联接查询:
join GroupJoin selectMany(这个也不好说)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace LInQ 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 int[] array={20,10,40,50,60,70,70,80,90}; 13 var ay = array.OrderByDescending(a => a); 14 foreach (var r in ay) 15 { 16 Console.WriteLine(r); 17 } 18 19 student[] stu ={ 20 21 new student(){stuNo=1001,English=60,Chinese=90,classNo="rj1001"}, 22 new student(){stuNo =1002,English=75,Chinese=80,classNo="rj1002"}, 23 new student(){stuNo =1003,English=80,Chinese=89,classNo="rj1003"}, 24 new student(){stuNo =1004,English=56,Chinese=80,classNo="rj1004"}, 25 }; 26 Class[] cs ={ 27 new Class(){classNo="rj1001",className="软件一班"}, 28 new Class(){classNo="rj1002",className="软件二班"}, 29 new Class(){classNo="rj1003",className="软件三班"}, 30 new Class(){classNo="rj1004",className="软件四班"}, 31 }; 32 Console.WriteLine("-------------OrderBy,ThenBy排序--------------"); 33 var stus = stu.OrderByDescending(a => a.English).ThenByDescending(a => a.Chinese); 34 foreach (var r in stus) 35 { 36 Console.WriteLine(r.English+"==="+r.Chinese); 37 } 38 Console.WriteLine("-------------count(聚合)--------------"); 39 var count = stu.Count(a =>a.English>60 && a.Chinese>80 ); 40 Console.WriteLine(count); 41 Console.WriteLine("-------------avg--------------"); 42 var avg = stu.Average(a => a.Chinese); 43 Console.WriteLine(avg); 44 Console.WriteLine("-------------max--------------"); 45 var max = stu.Max(a => a.Chinese); 46 Console.WriteLine(max); 47 Console.WriteLine("-------------集合(交集)--------------"); 48 //int[] array = { 20, 30, 40, 50, 60, 70, 70, 80, 90 }; 49 int[] array1 = { 35,40,45,55,65,70,88}; 50 var intersects = array.Intersect(array1); 51 Console.WriteLine(intersects.Count()); 52 Console.WriteLine("-------------集合(并集)--------------"); 53 int[] array2 = { 30, 35, 40, 45, 55, 65, 70, 88 }; 54 var union = array.Union(array2); 55 Console.WriteLine(union.Count()); 56 Console.WriteLine("-------------FirstOrDefault--------------"); 57 student stu1 = stu.FirstOrDefault(a => a.English > 60 && a.Chinese > 80); 58 Console.WriteLine(stu1.stuNo); 59 Console.WriteLine("-------------SingleOrDefault(Single)--------------"); 60 var stuss = stu.Where(a => a.English > 60); 61 foreach (var r in stuss) 62 { 63 64 var cname = cs.Where(a => a.classNo == r.classNo).SingleOrDefault().className; 65 Console.WriteLine("学生号:"+r.stuNo+"\t英语:"+r.English+"\t语文"+r.Chinese+"\t班级名:"+cname); 66 67 } 68 Console.WriteLine("-------------(分区函数)Skip(skipWhile),Take(takeWhile)--------------"); 69 //int[] array = { 20, 10, 40, 50, 60, 70, 70, 80, 90 }; 70 //var array3 = array.Skip(2).Take(2); 71 //var array4 = array.SkipWhile(a => a > 30); 72 var array5 = array.TakeWhile(a => a> 10); 73 foreach (var r in array5) 74 { 75 Console.WriteLine(r); 76 } 77 Console.WriteLine("-------------联接查询(join,groupjoin,selectmany)--------------"); 78 //var st = cs.Join(stu, a => a.classNo, b => b.classNo, (c, d) => new { classname = c.className, stuname = d.stuNo }); 79 80 var st2 = cs.SelectMany(a => stu,(c, d) => new { classname = c.className, stuname = d.stuNo }); 81 foreach (var r in st2) 82 { 83 Console.WriteLine(r.classname+"========"+r.stuname); 84 } 85 86 } 87 class student 88 { 89 public int stuNo { get; set; } 90 public int English { get; set; } 91 public int Chinese { get; set; } 92 public string classNo{get;set;} 93 } 94 class Class 95 { 96 public string classNo { get; set; } 97 public string className { get; set;} 98 } 99 } 100 }
关于定义匿名方法,筛选、投影,具体例子如下
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System; using System.Collections.Generic; using System.Text; using T2; using System.Linq; using System.Collections; namespace T1 { delegate void MyDelegate1 (int a); delegate int MyDelegate2 (int a); class Program { static void Main(string[] args) { //var i = 100;//推断类型:类型是确定,声明的时候必须初始化 //var s = "hello world"; //Console.WriteLine(s.ToFirstUpper()); //Console.WriteLine(s.ToMyString("小蜜")); //MyDelegate1 md1 = delegate(int a) { Console.WriteLine("hello world"); };// 定义匿名方法,必须使用委托变量保存,匿名方法的方法名都是delegate //md1(2); ////lambda表达式:就是一个匿名方法的简写形式 ////-()表示输入的参数列表; => 读goes to {}表示方法体 ////1、表达式中的参数列表可以省略数据类型 ////2、当参数列表中只有一个参数时,可以省略(),其他情况都不能省略 ////3、当方法体中只有一条语句,并且该语句是return 语句时。可以省略{},并且同时必须省略return关键字 //MyDelegate1 md2= (int a) => { Console.WriteLine("Hello world"); }; //MyDelegate1 md3 = (a) => { Console.WriteLine("Hello world"); }; //MyDelegate1 md4 = a => { Console.WriteLine("Hello world"); }; //MyDelegate1 md5 = a => a = a * 100; //MyDelegate2 md6 = a => { return a * 1000; }; //var d = md6(23); //Console.WriteLine(d); ////匿名类:没有名字的类,主要用作临时传递数据 //var x = new { Name="zhangsan",Age=18,Score=54}; //Console.WriteLine(x.Age); //实现了IQueryAble<T>接口或者IEnumerable<T>接口的对象才能使用linq int[] ss = { 5,6,34,23,12,25,78,43}; //语法查询 //var s=from a in ss // where a>10 // select a; //方法查询:使用Where进行过滤 var s= ss.Where(a => a > 10); foreach (var x in s) { Console.WriteLine(x); } //投影:就是根据数据转换成你需要的数据 var s1 = ss.Select(a=>a*100); foreach (var x in s1) { Console.WriteLine(x); } var s2 = ss.Where(a => a > 10).Select(a => "成绩是:" + a); foreach (var x in s2) { Console.WriteLine(x); } var s3 = ss.Select(a => new {name="张三",Age=a }); foreach (var x in s3) { Console.WriteLine(x.name+"的年龄是:"+x.Age); } var s4 = ss.Count(a => a > 50); Console.WriteLine(s4); ArrayList list = new ArrayList{ new Student(){Name="小蜜",Score=70}, new Student(){Name="洋葱",Score=90}, new Student(){Name="西瓜",Score=54}, new Student(){Name="脑残",Score=48}, new Student(){Name="阿木",Score=88}, new Student(){Name="杨桃",Score=65} }; var s5 = list.Cast<Student>().Where(a => a.Score >= 60); foreach (var x in s5) { Console.WriteLine(x.Name + "的成绩是:" + x.Score); } } //static void FF() //{ // Console.WriteLine("hello world"); //} } class Student { public string Name { get; set; } public int Score { get; set; } } }