当前位置:
首页 > Python基础教程 >
-
ASP.net教程之.net Lambda表达式与Linq (LINQ TO object)
Lambda表达式,是用来写匿名方法的。
在委托用得比较多,因为委托是传递方法的。
定义几个委托:
public delegate void DoNoThing();//无参无返回值
public delegate void DoNoThingWithPara(sting name,int age);//有参无返回值
public delegate sting DoNoThingWithReturn();//无参有返回值
public delegate int DoNoThingWithParaAndReturn(stiing name,int age);//有参有返回值
实例化委托
DoNothing dnt = ()=>{}; //无参无返回值方法
DoNoThingWithPara dtwp = (x,y)=>{};//有参无返回值
DoNoThingWithReturn dtwr = ()=>"Hello"; //无参有返回值
DoNoThingWithParaAndReturn dntwpr = (x,y)=> 123; //有参有返回值
这就是Lambda表达式的写法,本质就是方法。
Linq To Object
准备一个类:学生类student
public class Student { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public int ClassId { get; set; } }
准备学生数据:
List<Student> stus= new List<Student> { new Student(){Id=1,Name="张三1",Age=27,ClassId=1 }, new Student(){Id=2,Name="张三2",Age=27,ClassId=1 }, new Student(){Id=3,Name="张三3",Age=27,ClassId=1 }, new Student(){Id=4,Name="张三4",Age=27,ClassId=1 }, new Student(){Id=5,Name="张三5",Age=27,ClassId=1 }, new Student(){Id=6,Name="张三6",Age=27,ClassId=2}, new Student(){Id=7,Name="张三7",Age=19,ClassId=2}, new Student(){Id=8,Name="张三8",Age=19,ClassId=2}, new Student(){Id=9,Name="张三9",Age=19,ClassId=2}, new Student(){Id=10,Name="李四",Age=32,ClassId=2 }, new Student(){Id=11,Name="李四1",Age=32,ClassId=2 }, new Student(){Id=12,Name="李四2",Age=32,ClassId=3 }, new Student(){Id=13,Name="李四3",Age=32,ClassId=3 }, new Student(){Id=14,Name="李四4",Age=32,ClassId=3 }, new Student(){Id=15,Name="李四5",Age=32,ClassId=3 }, new Student(){Id=16,Name="李四6",Age=32,ClassId=3 }, new Student(){Id=17,Name="李四7",Age=37,ClassId=3 }, new Student(){Id=18,Name="李四8",Age=37,ClassId=4 }, new Student(){Id=19,Name="王五",Age=37,ClassId=4 }, new Student(){Id=20,Name="王五1",Age=37,ClassId=4 }, new Student(){Id=21,Name="王五2",Age=37,ClassId=4 }, new Student(){Id=22,Name="王五3",Age=37,ClassId=4 }, new Student(){Id=23,Name="王五4",Age=37,ClassId=4 }, new Student(){Id=24,Name="王五5",Age=37,ClassId=4 }, new Student(){Id=25,Name="王五6",Age=37,ClassId=4 }, new Student(){Id=26,Name="王五7",Age=37,ClassId=4 } };
查询班级Id是1的 var list = from s in stus where s.ClassId == 1 select new { Name = s.Name, ClassId = s.ClassId }; foreach (var item in list) { Console.WriteLine(item.Name + "---" + item.ClassId); } //或者用框架的方法,查询年龄大于30的学生 Console.WriteLine("**********************"); var list1 = stus.Where(s => s.Age > 30).Select(s => new { Id = s.Id, Name = s.Name, Age = s.Age }); foreach (var item in list1) { Console.WriteLine(item.Id + "---" + item.Name + "--" + item.Age); }
下面写一个分页的Linq
var list = stus.Where(s => s.Age > 30)//条件筛选 .Select(s => new //投影 { Name = s.Name, Age = s.Age, ClassId = s.ClassId }).OrderBy(s => s.Age)//排序 .Skip(2)//跳过几条 .Take(3);//获取几条 ,用于分页 foreach (var item in list) { Console.WriteLine(item.Name + "--" + item.Age); }
内连接,准备另外一个班级类
public class ClassInfo { public int Id { get; set; } public string ClassName { get; set; } } List<ClassInfo> classes = new List<ClassInfo>() { new ClassInfo(){Id=1,ClassName="初级班" }, new ClassInfo(){Id=2,ClassName="中级班" }, new ClassInfo(){Id=3,ClassName="高级班" }, // new ClassInfo(){Id=4,ClassName="超级班" }, };
var list = from s in stus join cla in classes on s.ClassId equals cla.Id select new { name = s.Name, className = cla.ClassName, age = s.Age }; foreach (var item in list) { Console.WriteLine(item.name+"========"+item.className+"==="+item.age); }
左外连接
var list1 = from s in stus join c in classes on s.ClassId equals c.Id into slist from sc in slist.DefaultIfEmpty() select new { name = s.Name, className = sc== null ? "没有班级":sc.ClassName, age = s.Age }; foreach (var item in list1) { Console.WriteLine(item.name + "========" + item.className + "===" + item.age); }
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式