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(这个也不好说)
 
View Code
  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 }

 

关于定义匿名方法,筛选、投影,具体例子如下 
 
View Code
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;
        }
    }
}

 

posted @ 2012-04-20 21:00  穿旗袍的女人  阅读(176)  评论(0编辑  收藏  举报