当前位置: 首页 > 编程日记 > 正文

Linq基础知识小记二

书写Linq查询有两种方法,第一种是通过方法语法(也就是扩展方法),第二种是查询表达式语法.

1、方法语法

方法语法就是通过扩展方法和Lambda表达式来创建查询

(1)、链式查询

这种查询方式很多语言都支持,通过一段实例,介绍Linq的链式查询.需求如下:找出字符串数组中含有字母e的字符穿,并按长度排序,最后将结果转为大写.代码如下:

string[] names = {"James","Kobe","Curry","Durrent" };
IEnumerable<string> result = names.Where(n =>n.Contains('e')).OrderBy(n => n.Length).Select(n => n.ToUpper());
foreach (var n in result)
{Console.WriteLine(n);
}

链式查询的原理:一个词"扩展方法",核心是扩展方法,因为where、OrderBy、Select等扩展方法返回都是一个IEnumerable<T>类型对象,所以配合扩展方法本身的特殊性(不懂,请参考C# this关键字(给底层类库扩展成员方法)就实现了链式查询的功能.关于这个如果了解jQuery链式查询的可能更容易理解.

(2)、OrderBy、Where、Selet查询方法简单介绍

Where:该方法决定了过滤的规则,也就是按照Where方法中Lambda制定的规则,当前element是否能继续留在数据集合中.

OrderBy:按照Lambda制定的规则对数据集合进行排序.

Select:按照Lambda制定的规则决定了当前数据集合要以怎样的方式输出.

(3)、方法语法中除了Select、OrderBy、Where的其它查询操作符

并不是所有的查询运算符都返回一个IEnumerable<T>,所以使用这类查询操作符之后不能使用其他的查询操作符,这类查询一般出现在查询的最后.如下:

int[] numbers = {1, 2, 54, 546, 7, 87, 8, 9, 66};
int first = numbers.First(n=>n>500);//找出复合Lambda规则的第一个数字,如果不传Lambda,则默认找出目标数组的第一个,注:这里并不会大小上的第一个,而是位置上的第一个
int last = numbers.Last(n=>n>1);//同理,但它是找出最后一个
int firstOne = numbers.OrderBy(n=>n).First(n => n > 500);//对数组进行排序,排序后找出大于500的第一个数
int elementAt = numbers.ElementAt(2);//找出位于数组第三个的数
Console.WriteLine(first + "  " +last+"  "+firstOne+"  "+ elementAt);

还有一些特殊的运算符接收输入两个数据集,如Union和Concat,如下:

int[] arr1 = {1,2,2,1,5,6};
int[] arr2 = {1, 3, 5, 6, 78, 8};
IEnumerable<int> result = arr1.Concat(arr2);//联结两个数组,不去重
IEnumerable<int> result1 = arr1.Union(arr2);//联结两个数组,去重
foreach (var n in result)
{Console.Write(n + " ");
}
Console.WriteLine();
foreach (var n in result1)
{Console.Write(n+" ");
}

关于类似的方法还有很多,推荐去研究下System.Linq.Enumerable类

2、Linq查询表达式语法

Linq查询表达式语法写出的查询比较类似与Sql语句,是C#3.0加入的,虽然Linq查询表达式看上去类似于Sql查询,但实际上它并不是建立在Sql语句上,而是建立在函数式编程语言如LISP和Haskell中的list comprehensions(列表解析)功能之上,也就是所编译器会对Linq查询表达式进行处理,并编译成扩展方法,实质也是在使用扩展方法进行查询.

下面对1中链式查询的的例子进行改写,使用Linq查询表达式语法,代码如下:

string[] names = { "James", "Kobe", "Curry", "Durrent" };
var result = from n in names
where n.Contains("e")
orderby n.Length
select n.ToUpper();
foreach (var n in result)
{Console.WriteLine(n);
}

查询表达式总是已From子句开始,From子句定义了查询的范围变量,改变量其实就是对数据集合的一个遍历,就像foreach语句那样.

上图是标准的查询表达式语法图

3、组合查询语法

因为查询表达式语法和扩展方法语法各有所长,其实本质上查询表达式编译之后也是一种方法语法,两者是真包含的关系,所以使用起来可以根据自身的喜好来决定,但是当一个查询操作运算符没有对应的查询表达式语法时,那么就需要结合两种方法,来得到我们想要的结果,如下:

string[] names = { "James", "Kobe", "Curry", "Durrent" };
var result = (from n in names where n.Contains("J") select n).Count();//查询name集合中包含字母J的字符串个数
Console.WriteLine(result);

这种组合语法通常在书写更加复杂的查询时会具有优势。像上面这种简单的查询可能使用方法语法就够了.

转载于:https://www.cnblogs.com/GreenLeaves/p/7600801.html

相关文章:

Linux查看文件内容的5种方式

目录 1. more指令 —— 分页显示文件内容 2. less指令 —— 可以向前或向后查看文件内容 3. head指令 —— 查看文件开头的内容 4. tail指令 —— 显示文件尾部的内容 5. cat指令 —— 显示文件内容 1. more指令 —— 分页显示文件内容 more指令会以一页一页的形式显示文…

通过病毒名称识病毒

很多时候大家已经用杀毒软件查出了自己的机子中了例如Backdoor. RmtBomb.12 、Trojan.Win32.SendIP.15 等等这些一串英文还带数字的病毒名&#xff0c;这时有些人就懵了&#xff0c;那么长一串的名字&#xff0c;我怎么知道是什么病毒啊&#xff1f; 其实只要我们掌握一些病…

MySQL相关命令

目录 1、MySQL登录命令 2、MySQL查看系统中有哪些数据库 3、查看当前使用的数据库 4、 更换&#xff08;或者使用&#xff09;指定的数据库 5、查看当前数据库中已经存在的表格 6、查看表结构 7、查看MySQL版本信息 8、创建数据库 9、删除数据库 10、选择数据库 11、…

[Linux] 010 权限管理命令 chmod

1. 权限管理命令&#xff1a;chmod 命令名称&#xff1a;chmod命令英文原意&#xff1a;change the permissions mode of a file命令所在路径&#xff1a;/bin/chmod执行权限&#xff1a;所有用户语法&#xff1a; chmod [{ugoa} {-} {rwx}] [文件或目录] [mode421] [文件或目录…

bzoj 1787 紧急集合

题目大意&#xff1a; 一棵树上&#xff0c;两个相邻点之间距离为1&#xff0c;每次询问三个点&#xff0c; 求到这三个点距离和最小的点&#xff0c;以及这个距离和 思路&#xff1a; 几乎是lca裸题 lca&#xff1a;倍增即可 然后求出每两个点之间的lca 画画图可知必有两个lca…

一些权限管理方面的文章

http://www.cnblogs.com/yukaizhao/archive/2007/04/15/user_role_action_permission.html 六种不同需求的权限设计数据库关系图&#xff08;从易到难&#xff09; 金色海洋的自然框架系列 http://www.cnblogs.com/jyk/archive/2009/06/06/1497616.html 吉日嘎啦的 简单操作权…

editplus 3 注册码

editplus 3 注册码注册信息:kariryo5387D-12450-BCZ8B-D6W0B-85TE1

15.linux-LCD层次分析(详解)

如果我们的系统要用GUI&#xff08;图形界面接口&#xff09;&#xff0c;这时LCD设备驱动程序就应该编写成frambuffer接口&#xff0c;而不是像之前那样只编写操作底层的LCD控制器接口。 什么是frambuffer设备&#xff1f; frambuffer设备层是对图像设备的一种抽象&#xff0c…

【牛客网】最长对称子串

给定一个字符串&#xff08;数字或大小写字母&#xff09;, 找出最长的对称的子串&#xff08;如有多个&#xff0c;输出任意一个&#xff09;。例如&#xff1a;输入&#xff1a;“abbaad”输出&#xff1a;“abba”#include <iostream> #include <cstring> #incl…

利用JS中window.showModalDialog()详解

window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框。 window.showModelessDialog()方法用来创建一个显示HTML内容的非模态对话框。 使用方法&#xff1a; vReturnValue window.showModalDialog(sURL [, vArguments] [,sFeatures]) vReturnValue window.show…

数据库及页面乱码问题

目录 MySQL乱码问题 1、页面编码和文件编码 2、控制器/过滤器&#xff08;filter&#xff09; 3、数据库及表格编码 4、字符流编码 5、Tomcat编码 6、外部文件编码 MySQL乱码问题 1、页面编码和文件编码 JSP、HTML页面头部以及文件编码设置字符编码格式为UTF-8。 &…

Cornell University Designing with Microcontrollers

http://instruct1.cit.cornell.edu/courses/ee476/转载于:https://www.cnblogs.com/stoneresearch/archive/2008/10/21/4336378.html

Tomcat下载安装与环境变量的配置

注意&#xff1a;安装Tomcat之前&#xff0c;一定要先安装好JDK并正确配置jdk环境变量&#xff1b; 参考教程&#xff1a;JDK的安装与环境变量的配置 1、Tomcat下载 &#xff08;1&#xff09;百度搜索“Tomcat官网”、“Tomcat下载”等类似关键字&#xff0c;或者进入Tomcat…

[HNOI2015]落忆枫音

题目描述 不妨假设枫叶上有 n个穴位&#xff0c;穴位的编号为 1 ~ n。有若干条有向的脉络连接着这些穴位。穴位和脉络组成一个有向无环图——称之为脉络图&#xff08;例如图 1&#xff09;&#xff0c;穴位的编号使得穴位 1 没有从其他穴位连向它的脉络&#xff0c;即穴位 1 …

xp下安装sqlserver 2000的解决方案

1.在运行对话框输入&#xff1a;regedit&#xff08;注册表&#xff09; 2.把HKEY_LOCAL_MACHINE-----SYSTEM---------ControlSet001-------SessionManger--------PendingFileRenameOperations删除。转载于:https://www.cnblogs.com/deary/archive/2009/06/23/1509427.html

洛谷P2380 狗哥采矿

P2380 狗哥采矿 题目背景 又是一节平静的语文课 狗哥闲来无事&#xff0c;出来了这么一道题 题目描述 一个n*m的矩阵中&#xff0c;每个格子内有两种矿yeyenum和bloggium&#xff0c;并且知道它们在每个格子内的数量是多少。最北边有bloggium的收集站&#xff0c;最西边有 yeye…

详解DNS的常用记录(下):DNS系列之三

详解DNS常用记录&#xff08;下&#xff09;在上篇博文中我们介绍了DNS服务器中几种不可或缺的记录&#xff0c;包括A记录&#xff0c;NS记录和SOA记录。本篇博文中我们将继续为大家介绍DNS的另外几种常用记录&#xff0c;希望能对大家了解DNS有所帮助。四MX记录MX记录也被称为…

DP_knapsack

动态规划法解0-1背包问题 问题描述&#xff1a; 有n个背包&#xff0c;重量依次为w1,w2, ... ,wn, 价值依次是v1,v2, ... ,vn, 现在有一个大背包&#xff0c;其容量是capacity&#xff0c;往其中装小背包&#xff0c;要求得到的总价值最大&#xff0c;如何装&#xff1f; 用val…

三种求全排列方式之比较

一共有三种求全排列的方式&#xff1a; 第一种就是只适合用于非可重集的DFS实现 第二种就是可以用于可重集上的刘汝佳书上的代码 第三种就是STL中的next——permutation 在对这三种方式做了比较之后发现&#xff1a; DFS实现的效率最高&#xff0c;当n 10的时候耗时才不到2s&a…

Java连接数据库 JDBC

1、JDBC是什么&#xff1f; JDBC&#xff0c;英文全称&#xff1a;Java DataBase Connectivity&#xff0c;中文全称&#xff1a;java数据库连接&#xff0c;是一种用于执行SQL语句的Java API&#xff0c;可以为多种关系数据库提供统一访问&#xff0c;由一组用Java语言编写的类…

西门子smart200以太网通讯协议

西门子smart200具体的通讯文档在网上或者官网我都没有找到&#xff08;哪位大仙有请给我留言发个感激不尽&#xff09;&#xff0c;本人是通过监听控制软件分析出其中的通讯协议。 连接是通过TCP/IP协议&#xff0c;我一般喜欢用Java写测试Socket。 通讯是依照字节流沟通&#…

祝我亲爱的天蝎GG生日快乐!+相识3周年小纪念

作者&#xff1a;快乐de蚂蚁2005年10月26日我们相识于清华一教于千万人之中相遇了彼此&#xff0c;你推着车走过来&#xff0c;我站在一教门口午后温暖的阳光斑斑驳驳的洒在你身上&#xff0c;唇红齿白&#xff0c;羞涩的笑容。。。第一次见面的此情此景永远定格在我的脑海。谁…

Aspose.Words导出图片 表格 Interop.Word

先定义一个WORD 模板&#xff0c; 然后替换文本、域 &#xff0c;定位开始表格 文本和段落 // Specify font formattingAspose.Words.Font font builder.Font;font.Size 16;font.Bold true; ;font.Color Color.Black;font.Name "Arial";font.UnderlineUnderline.…

[转帖]tar高级教程:增量备份、定时备份、网络备份

tar高级教程&#xff1a;增量备份、定时备份、网络备份 作者: lesca 分类: Tutorials, Ubuntu 发布时间: 2012-03-01 11:42 ė浏览 27,065 次 61条评论一、概述 备份与恢复对于系统维护而言是至关重要的事情。不合理的备份与还原会让你的数据面临丢失的风险。许多用户都在丢失重…

C# 异步读取数据库里面的数据与绑定UI的解决办法

异步读取数据库,在数据绑定的时候会出现点问题,就是窗体界面会无法关闭,要结束任务才能结束进程。例如下面代码 首先按习惯的方法&#xff0c;设定线程更新UI a2.CheckForIllegalCrossThreadCalls false; //a2为窗体名称 下面的代码就是从数据库里取得数据并绑定 private vo…

类、抽象类、接口之间的区别

目录 1、类与抽象类的异同之处 &#xff08;1&#xff09;类和抽象类的区别 &#xff08;2&#xff09;类和抽象类的相同之处 2、接口与类的异同之处 &#xff08;1&#xff09;接口与类相似点 &#xff08;2&#xff09;接口与类的区别 &#xff08;3&#xff09;接口…

(ASA) Cisco Web ××× 配置详解 [三部曲之一]

(ASA) Cisco Web 配置详解 [三部曲之一] 注意&#xff1a;本文仅对Web特性和配置作介绍&#xff0c;不包含SSL 配置&#xff0c;SSL 配置将在本版的后续文章中进行介绍。 首先&#xff0c;先来谈一谈ASA7.X系统中的默认隧道组和组策略。ASA/PIX 7.x系统默认在show run时不显示…

IDEA和Eclipse设置文件编码格式

1、IDEA设置已有文件的编码格式 在页面右下角可以看到文件的编码方式&#xff0c;如果编码方式的图标为灰色&#xff0c;则无法修改编码格式&#xff1b;如果其颜色不是灰色且其右侧有上下方向的三角形形状&#xff0c;点击它&#xff0c;可以修改编码方式。 注意&#xff1a;该…

关于运行ssm,web请求出现HTTP415错误

HTTP415错误&#xff1a;如果controller中用到了json传值&#xff0c;那么就必须加入 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <jackson.version>2.…

堆和栈浅析【转】

引用&#xff1a; 一、预备知识—程序的内存分配一个由c/C编译的程序占用的内存分为以下几个部分1、栈区&#xff08;stack&#xff09;— 由编译器自动分配释放 &#xff0c;存放函数的参数值&#xff0c;局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区&#xff…