常用的C#LINQ理解和运用
来源:互联网 发布:梯度下降算法 matlab 编辑:程序博客网 时间:2024/06/17 13:12
自从大二学习了C#这门编程语言,到目前为止,要说自己对哪个地方最为深刻与赞叹,我觉得当然要数:①C#组件技术(.NET基本组件、.NET组件、用户定制控件);②语言集成查询LINQ。前者让我们的编程变得简单——不管是站在巨人的肩膀上还是站在自己的肩膀上!后者让我们对于对于集合对象有了很优质的操作,由其对于我们这种工科的学生编程来说。这次,出于学习总结的角度,写下一些关于LINQ的学习笔记,也许也能让一些新学习的朋友借鉴一下。
(1)从匿名方法说起:
匿名方法即是“没有名称”的方法,它是出于为委托或者事件提供简化绑定方法的目的的。因此,在方法本身代码较少易于管理的情况下,使用匿名方法就不必去定义事件订阅者类了。
class EventSender{ delegate void SomeDelegate(string mgs); static void Main() { SomeDelegate obj=delegate(string mgs) { Console.WriteLine("mgs"); } obj("委托调用匿名方法"); } }
(2)lanmuda表达式:
lanmuda表达式是对匿名方法的简化,任何匿名方法使用的场合lanmuda表达式都可以替代,并且代码更加简洁。lanmuda表达式会广泛用于LINQ中。lanmuda表达式的形式如下;
①无参的:()=>{处理语句};
②一个参数的:参数=>{处理语句};
③多个参数的:(参数1,参数2,…参数n)=>{处理语句}。
备注:一条处理语句,{}可以省略!
匿名方法:SomeDelegate obj=delegate(string mgs) { Console.WriterLine("mgs"); }对应的lanmuda表达式:SomeDelegate obj=mgs=>Console.WriterLine("mgs");
(3)LINQ查询语法:
①方法语法:扩展方法+lanmuda表达式;
②声明式的查询语法类似于SQL查询方式。
PS:什么是扩展方法?扩展方法就是向现有的类型添加一些方法,使得该类型在功能上有所扩展!扩展方法可以简化以继承实现的方法扩展,并且在不知道原有基类的内部构造时,将十分有利。
a.方法语法(传输链):
IEnumerabl<T>query=源集合.Where(过滤,必须bool表达式).OrderBy(排序条件).Select(选择条件)
b.查询表达式:
var 结果集=from n in 数据源 where 过滤表达式 orderby 排序 select 投影(选择)查询表达式需以select或者group结束!
(4)目前自己常用的一些方法总结:
①返回list<>或者数组元素个数,以便循环:.Count/.Count();
for (int j = 0; j < TextData.Count; j++) { if (TextData[j].Trim().ToCharArray().Count() > 3) { directs++; } else break; }
②返回序列中满足某些条件的元素个数:
int Stations = TextData.Count(s => s[0] == 'D');(TextData是一个string类的顺序表,返回TextData中以D开头的元素个数)
③返回序列:最大值、最小值、和、平均数、指定运算等
static void Main(string[] args) { int[] nums = new int[] { 1, 2, 3, 4, 5 }; int sum = nums.Sum(); int max = nums.Max(); int min = nums.Min(); double average = nums.Average(); //Aggregate()实质为累加器函数 int num1 = nums.Aggregate((s, t) => s + t); Console.WriteLine(num1); Console.ReadKey(); }
④返回序列的中满足某条件的第一个元素本身,或者元素的索引:
a.满足条件第一个元素本身: 序列.First(指定条件,如s=>s.StartsWith("e"))b.满足条件第一个元素的索引(位置):var query = (from n in TextData select n).TakeWhile(s => s[0] != 'D');int firstStation = query.Count();//firstStation即是索引
⑤序列转换:
.ToArray();序列转换成数组;.ToList()序列转换成顺序表;
public struct Point { public double x; public double y; } List<Point>Rl=new new List<Point>(); ………… ………… List<double> PaintX = RL.Select(s => s.x).ToList(); List<double> PaintY = RL.Select(s => s.y).ToList();
0 0
- 常用的C#LINQ理解和运用
- c/c++中可变参数的理解和运用
- Linq 中 Distinct 的运用
- struts配置的运用和理解
- ThreadLocale理解和对WeakReference的运用
- ThreadLocal理解和运用
- C中内存和指针的运用
- C语言中 #和##的运用
- c指针和malloc的运用注意
- assert运用的理解
- Linq的常用查询和操作总结实例
- 深刻理解和运用XMLHttpRequest
- 论对DIV和Table运用的理解
- DJANGO中migration(迁移)的理解和运用
- PCA算法的理解,和在kneans中的运用
- KVC 和 KVO 的基础理解与运用
- Why-How-What黄金圈法则 的理解和运用
- redis的详细理解和运用_入门
- 电脑的远程控制连接
- iMobile中灵活运用图层,你知多少
- 搭建 AngularJS+Ionic+Cordova 开发环境
- libevent学习---使用evbuffer操作数据
- Java之美[从菜鸟到高手演变]之设计模式四
- 常用的C#LINQ理解和运用
- 【WLAN从入门到精通-基础篇】第2期——WLAN射频和信道
- 分布式计算开源框架Hadoop入门实践
- JavaScript -- 对象
- Minicom的使用
- 欢迎使用CSDN-markdown编辑器
- 一句话说明策略模式
- C++ 总结几种结构体初始化的方法
- Android--SQLite事务