zoukankan      html  css  js  c++  java
  • linq to object

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading.Tasks;
      6 
      7 namespace Linq
      8 {
      9     class LinqToObject
     10     {
     11         private List<Student> listStu = null;
     12         private List<ClassStu> listClass = null;
     13         private Random random = new Random();
     14         public void SetList()
     15         {
     16             
     17             listStu = new List<Student>();
     18             listClass = new List<ClassStu>();
     19             for (int i = 0; i < 30; i++)
     20             {
     21                 var student = new Student()
     22                 {
     23                     id=random.Next(1,30),
     24                     name=$"阿毛{random.Next(0,30)}",
     25                     age = random.Next(10, 40)
     26                 };
     27                 var classStu = new ClassStu()
     28                 {
     29                     id = random.Next(1, 30),
     30                     name = $"班级{random.Next(1, 20)}",
     31                     number = random.Next(20, 50)
     32                 };
     33 
     34                 listStu.Add(student);
     35                 listClass.Add(classStu);
     36             }
     37         }
     38 
     39         public void Show()
     40         {
     41             SetList();
     42             listStu.Where<Student>(s => s.age < 10).ToList().ForEach((m) => Console.WriteLine($"该学生的年龄小于10的有{m.name}==>{m.age}"));
     43         }
     44 
     45         //延迟加载
     46         public void DelayShow()
     47         {
     48             SetList();
     49             {
     50                 Console.WriteLine("**************************************");
     51                 //查询运算符
     52                 var list = Enumerable.Where(listStu, (s) =>
     53                 {
     54                     Console.WriteLine("123"); //在返回结果之前添加一些别的可以延迟
     55                     return s.age < 10;
     56                 });
     57                 foreach (var item in list)
     58                 {
     59                     Console.WriteLine($"该学生的年龄小于10的有{item.name}==>{item.age}");
     60                 }
     61             }
     62             
     63             {
     64                 //投影第1种
     65                 Console.WriteLine("**************************************");
     66                 //查询运算符
     67                 var list = Enumerable.Where(listStu, (s) =>
     68                 {
     69                     Console.WriteLine("123");
     70                     return s.age < 10;
     71                 }).Select(s => new
     72                 {
     73                     newId = s.id + "**",
     74                     newName = s.name + "###",
     75                     newAge = s.age + "++++"
     76                 })
     77                 .OrderBy(ns => ns.newId) //可做排序,正序
     78 
     79                 .OrderByDescending(ns => ns.newAge) //倒序
     80 
     81                 .ThenBy(ns=>ns.newAge) //再次排序
     82 
     83                 .Skip(10)  //可做分页,跳过多少条数据
     84 
     85                 .Take(3);  //获取多少条数据
     86 
     87                 foreach (var item in list)
     88                 {
     89                     Console.WriteLine($"该学生的年龄小于10的有{item.newId}==>{item.newName}===>{item.newAge}");
     90                 }
     91             }
     92 
     93             {
     94                 //内连接
     95                 Console.WriteLine("**************************************");
     96                 var list = Enumerable.Join(listStu, listClass, m => m.id, n => n.id, (m, n) => new
     97                 {
     98                     stuId=m.id,
     99                     classId=n.id
    100                 }).DefaultIfEmpty();   // 如果要写左连接,则直接在末尾加上DefaultIfEmpty(),去掉则为内连接
    101 
    102                 foreach (var item in list)
    103                 {
    104                     Console.WriteLine($"内连接:stuId={item.stuId},classId={item.classId}");
    105                 }
    106             }
    107 
    108 
    109             Console.WriteLine("##############################################################################");
    110 
    111             {
    112                 //查询表达式
    113                 Console.WriteLine("**************************************");
    114                 var list = from s in listStu
    115                            where s.age < 10
    116                            select s;
    117                 foreach (var item in list)
    118                 {
    119                     Console.WriteLine($"该学生的年龄小于10的有{item.name}==>{item.age}");
    120                 }
    121             }
    122 
    123             {
    124                 //投影第2种
    125                 Console.WriteLine("**************************************");
    126                 var list = from s in listStu
    127                            where s.age < 10
    128                            orderby s.age descending
    129                            select new   //挑选出学生年龄小于10的学生后,再创建 新的对象 进行投影,new{}为匿名对象
    130                            {
    131                                newId = s.id + "**",
    132                                newName=s.name+"###",
    133                                newAge=s.age+"++++"
    134                            };
    135                            
    136                 //list为新对象集合
    137                 foreach (var item in list)
    138                 {
    139                     Console.WriteLine($"该学生的年龄小于10的有{item.newId}==>{item.newName}===>{item.newAge}");
    140                 }
    141             }
    142 
    143             {
    144                 //内连接第二种
    145                 Console.WriteLine("**************************************");
    146                 var list = from s in listStu
    147                            join c in listClass on s.id equals c.id
    148                            select new   //挑选出学生年龄小于10的学生后,再创建 新的对象 进行投影,new{}为匿名对象
    149                            {
    150                                newId = s.id +c.id,
    151                                newName = s.name + c.name,
    152                                newAge = s.age + c.number
    153                            };
    154 
    155                 //list为新对象集合
    156                 foreach (var item in list)
    157                 {
    158                     Console.WriteLine($"该学生的年龄小于10的有{item.newId}==>{item.newName}===>{item.newAge}");
    159                 }
    160             }
    161 
    162             {
    163                 //左连接
    164                 Console.WriteLine("**************************************");
    165                 var list = from s in listStu
    166                            join c in listClass on s.id equals c.id
    167                            into scList //将连接放进一个全新的集合中
    168                            from sc in scList.DefaultIfEmpty()
    169                            select new  
    170                            {
    171                                Name = s.name,
    172                                ClassName=sc==null?"无班级":sc.name //c变sc,为空则用
    173                            };
    174 
    175                 //list为新对象集合
    176                 foreach (var item in list)
    177                 {
    178                     Console.WriteLine($"该学生的年龄小于10的有{item.Name}==>{item.ClassName}");
    179                 }
    180             }
    181         }
    182     }
    183 }


    下面是一些Model类

     1  class Student
     2     {
     3         public int id { get; set; }
     4         public string name { get; set; }
     5         public int age { get; set; }
     6     }
     7 
     8 class ClassStu
     9     {
    10         public int id { get; set; }
    11         public string name { get; set; }
    12         public int number { get; set; }
    13     }
    View Code
    世界上最可怕事情是比我们优秀的人比我们还努力
  • 相关阅读:
    108.异常的传递
    107.捕获异常
    106.异常、模块(异常介绍)
    105.面向对象案例-烤红薯
    104.多态案例
    103.继承案例二
    102.继承案例一
    101.自定义玩家类
    100.自定义枪类
    python基础入门之十四 —— 文件操作
  • 原文地址:https://www.cnblogs.com/AlexOneBlogs/p/7389695.html
Copyright © 2011-2022 走看看