• LINQ的高级应用


    ---恢复内容开始---

    本文不想罗列linq的通俗使用方法。因为很多博文都已经写得很详细了。

    此处直接贴出源码,如果有需要的朋友可以参考,希望更多的朋友能够补充更多的linq的高级应用。

    源码如下:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading;
      6 
      7 namespace linq
      8 {
      9 class Program
     10 {
     11 static void Main(string[] args)
     12 {
     13 Person[] ps = { 
     14 new Person{Name="jack",Age=33,Phone="23564",PID=1},
     15 new Person{Name="tom",Age=35,Phone="235asdg64",PID=2},
     16 new Person{Name="jerry",Age=22,Phone="235dasg64",PID=3},
     17 new Person{Name="lily",Age=33,Phone="23asdg564",PID=4}
     18 };
     19 Animal[] ana = { 
     20 new Animal{AID=1,Name="dog",PID=1},
     21 new Animal{AID=1,Name="cat",PID=1},
     22 new Animal{AID=1,Name="dog",PID=2},
     23 new Animal{AID=1,Name="chicken",PID=1},
     24 new Animal{AID=1,Name="dog",PID=3},
     25 new Animal{AID=1,Name="dog",PID=1},
     26 new Animal{AID=1,Name="cat",PID=3},
     27 new Animal{AID=1,Name="cat",PID=2}
     28 };
     29 Console.WriteLine("----------------分组排序------------------------");
     30 //分组
     31 var result = from p in ps
     32 group p by p.Age into g//根据p的值对p进行分组,每组放入g变量中
     33 orderby g.Count() descending
     34 //g.Key为每一组的“组标识”(比如根据年龄groupby,年龄就是组标识)
     35 select new { Name = g.Key, Count = g.Count() };
     36 ps.Where(p => p.Age > 0);
     37 foreach (var p in result)
     38 {
     39 Console.WriteLine("年龄为:"+p.Name + "的人数是:" + p.Count);
     40 }
     41 
     42 Console.WriteLine("----------------等值连接------------------------");
     43 //连接 多表查询---下面为等值连接即内连接
     44 var data = from p in ps
     45 join a in ana on p.PID equals a.PID
     46 select new {PID=p.PID,PName=p.Name,PAge=p.Age,PPhone=p.Phone,AID=a.AID,AName=a.Name };
     47 foreach (var item in data)
     48 {
     49 Console.WriteLine(item.PID+"--"+item.PName+"--"+item.PAge+"--"+item.PPhone+"--"+item.AID+"--"+item.AName);
     50 }
     51 Console.WriteLine("----------------左连接------------------------");
     52 //左连接的写法
     53 var data1 = from p in ps
     54 join a in ana on p.PID equals a.PID
     55 into temp //临时表
     56 from t in temp.DefaultIfEmpty()
     57 select new { PID = p.PID, PName = p.Name, PAge = p.Age, PPhone = p.Phone, AID =( t!=null?t.AID:0), AName = (t!=null?t.Name:"null")};
     58 foreach (var item in data1)
     59 {
     60 Console.WriteLine(item.PID + "--" + item.PName + "--" + item.PAge + "--" + item.PPhone + "--" + item.AID+ "--" + item.AName);
     61 }
     62 
     63 //lamba本质剖析
     64 var d1 = from p in ps
     65 where p.Age>30
     66 select p;
     67 //Where,Select等均为IEnumerable接口的扩展方法
     68 var d2 = ps.Where(p => p.Age > 30).Select(p => p);
     69 var d3 = ps.Where(p => p.Age > 30);
     70 var d4 = ps.Where((p) => p.Age > 30);
     71 //其实where方法内的参数是一个匿名方法或者说是匿名委托 var p=function(parameter){return i>0}
     72 //系统委托 public delegate TResult Func<in T, out TResult>(T arg);
     73 //当只有一个参数,方法内只有一行代码时可以简写为 var d3 = ps.Where(p => p.Age > 30);
     74 var d5 = ps.Where((p) => { return p.Age > 30; });
     75 
     76 //lamba在多线程中的应用
     77 //i => { Console.WriteLine("hhh" +i); }就是一个匿名方法或者说匿名委托
     78 //Thread t1 = new Thread(i => { Console.WriteLine("hhh" +i); });
     79 Thread t1 = new Thread((i) => { Console.WriteLine("我是多线程委托实现:" + i); });
     80 t1.Start(3);
     81 
     82 //匿名委托的实现方式
     83 //DelFun dfun=delegate(int i){Console.WriteLine(i);};
     84 DelFun dfun = (i => { Console.WriteLine("我是匿名委托:"+i); });
     85 dfun(555);
     86 
     87 Console.Read();
     88 }
     89 delegate void DelFun(int i);
     90 class Person
     91 {
     92 public int PID { get; set; }
     93 public string Name { get; set; }
     94 public int Age { get; set; }
     95 public string Phone { get; set; }
     96 }
     97 class Animal
     98 {
     99 public int AID { get; set; }
    100 public string Name { get; set; }
    101 public int PID { get; set; }
    102 
    103 }
    104 }
    105 }
    106 
    107  
    作者:梦亦晓,转载请注明出处
    如果此文能给您提供帮助,请点击右下角的【推荐
    如果您对此文有不同的见解或者意见,欢迎留言讨论
  • 相关阅读:
    网络基础
    python之bootstrap(组件,SweetAlert插件)
    python之网页小图标的使用
    python之bootstrap(基本)
    python之JQuery(批量操作,监听按键)
    python之JQuery(文档操作,事件委托,事件冒泡)
    python之JQuery(动画点赞实例)
    python之JQuery(hover,input值动态变化的实现)
    Less-1
    python100例 21-30
  • 原文地址:https://www.cnblogs.com/eggTwo/p/3292065.html
Copyright © 2020-2023  润新知