Linq过滤符号Where/Skip/TakeWhile/Distinct使用实例讲解

C#编程 数据库操作应用 SkipWhile(源码)(源码) C#编程 数据库操作应用 SkipWhile(源码)(源码)C#编程 数据库操作应用 SkipWhile(源码)(源码)C#编程 数据库操作应用 SkipWhile(源码)(源码)C#编程 数据库操作应用 SkipWhile(源码)(源码)C#编程 数据库操作应用 SkipWhile(源码)(源码)C#编程 数据库操作应用 SkipWhile(源码)(源码)C#编程 数据库操作应用 SkipWhile(源码)(源码)C#编程 数据库操作应用 SkipWhile(源码)(源码)C#编程 数据库操作应用 SkipWhile(源码)(源码)C#编程 数据库操作应用 SkipWhile(源码)(源码)C#编程 数据库操作应用 SkipWhile(源码)(源码)C#编程 数据库操作应用 SkipWhile(源码)(源码)C#编程 数据库操作应用 SkipWhile(源码)(源码)C#编程 数据库操作应用 SkipWhile(源码)(源码)C#编程 数据库操作应用 SkipWhile(源码)(源码)C#编程 数据库操作应用 SkipWhile(源码)(源码)C#编程 数据库操作应用 SkipWhi 立即下载

原文地址:http://www.cnblogs.com/Bany/archive/2012/05/10/2494440.html

过滤符号总览:

Where: 返回满足给定条件的子集,SQL对应语法也是Where

Take: 返回前N条记录,丢弃剩余部分,SQL对应语法为Where ROW_NUMBER()或者TOP n子查询

Skip:跳过前N条记录, 返回剩余部分, SQL对应语法为Where ROW_NUMBER()或者NOT IN(Select Top N…)

TakeWhile:返回输入序列中的所有元素直到断言等于true,无SQL对应语法

SkipWHile:跳过输入序列中的元素直到断言等于true, 返回剩下的所有元素, 无SQL对应语法

Distinct:返回无重复的集合元素,SQL对应语法为Select Distinct

使用这些过滤方法, 你总是会得到与原始输入序列相等或者更少元素的输出序列,而不可能得到更多的元素.得到的这些元素与原先的元素是一致, 中间并没有做任何的转换.

一、Where

 string[] names = { “James”,“Jack”,“Hendry”,“Mary”,“David” };
 IEnumerable<string> query = names.Where (name => name.EndsWith ("y"));
 foreach(var s in query)
 Console.WriteLine(s); // Result: hendry, Mary 

使用复合查询语法:

 IEnumerable<string> query = from n in names where n.EndsWith ("y") select n;

在一个查询中, Where可以出现多次, 使用let可以将他们分离开:

 IEnumerable<string> query = from n in names
 where n.Length > 3
 let u = n.ToUpper()
 where u.EndsWith ("Y")
 select u; //Result: { "HENDRY", "MARY" } 

Where的另外一个断言一个int类型作为其第二个参数, 这个参数代表当前元素在输入序列中的索引位置, 断言可以使用这个信息来做过滤决定.例如:

 IEnumerable<string> query =
 names.Where ((n, i) => i % 2 == 0);
 foreach(var s in query)
 Console.WriteLine(s); //Result: James, Hendry, David 

这里只过滤偶数位置的元素,LINQ to SQL不支持此种过滤.

二、LINQ to SQL当中的Where

以下的方法会被转换为SQL当中的like操作符:

Contains, StartsWith, EndsWith

例如, c.Name.Contains(“abc”)被翻译成customer.Name LIKE ‘�c%’(如果要更加精确,可以使用参数化版本). 也可以使用SqlMethods.Like来执行更复杂的比较.你可以使用String上的CompareTo方法来执行字符顺序比较, 此方法映射到SQL的<和>操作符:

 dataContext.Purchase.Where(p=>p.Description.CompareTo(“c”) < 0);

LINQ to SQL也允许你应用Contains操作符对本地集合进行过滤操作, 例如:

 string[] chosenOnes = { "Tom", "Jay" };
 from c in dataContext.Customers where chosenOnes.Contains (c.Name)

其映射到SQL的in操作符:

WHERE customer.Name IN (“Tom”, "Jay")

三、Take和Skip

被take或者skip的元素数量: int

Take使用前n个元素并丢弃剩余的元素,

skip丢弃前n个元素并接受剩余的部分.

当你开发一个web页的时候这两个元素是很有用的, 它允许用户查看一个包含大量匹配数据的集合.例如, 假设用户使用短语LINQ查询一个图书数据库并且得到100个匹配记录, 下例返回了前20条:

 IQueryable query = dataContext.Books
 .Where (b => b.Title.Contains ("LINQ"))
 .OrderBy (b => b.Title)
 .Take (20);

接下来的这个查询返回了第21到40条:

 IQueryable query = dataContext.Books 
 .Where (b => b.Title.Contains ("LINQ"))
 .OrderBy (b => b.Title)
 .Skip (20).Take (20);

在SQL SERVER 2005当中,LINQ to SQL将Take和Skip翻译成ROW_NUMBER函数, 而在SQL SERVER2000中则对应到top n子查询.

四、TakeWhile和SkipWhile

TakeWhile从头开始检查序列中的每一个元素,碰到第一个符合条件的元素就停止.返回符合条件元素前面的所有元素.

 int[] numbers = { 3, 5, 2, 234, 4, 1 };
                                               
 // RESULT: { 3, 5, 2 } 

SkipWhile同TakeWhile相反,从头开始检查序列中的每一个元素.碰到第一个符合条件的元素后,将此元素和其后所有元素返回.

 int[] numbers = { 3, 5, 2, 234, 4, 1 };
 var skipWhileSmall = numbers.SkipWhile (n => n < 100);
 // RESULT: { 234, 4, 1 } 

TakeWhile和SkipWhile没有SQL的对应翻译,因此如果你就其应用于LINQ to SQL当中将会得到一个运行时错误.

五、Distinct

Distinct返回从输入序列中剥离了重复元素的序列.如下例:

 char[] distinctLetters =
 "HelloWorld".Distinct().ToArray( );
 string s = new string (distinctLetters); // HeloWrd 

我们可以直接对string调用LINQ方法因为string实现了IEnumerable

 

用python画带有正负值的条形图 常见的条形图只能表现数据的大小,却不能表现值的正负关系。但是其实仅仅使用`pandas`和`matplotlib`两个包就可以实现y轴负轴的添加以及负值的显示,并且可以为正负值分别设置不同的颜色,让条形图看上去更加清晰,易于我们分析 阅读详情

相关推荐

SAP-ML章<<<<第二节:物料账报错处理ABAP编程错误:RAISE_EXCEPTION>>>>

#SAP-ML章<<<<第一节:物料账报错处理ABAP编程错误:RAISE_EXCEPTION>>>> 1.物料账报错提示: ABAP编程错误:RAISE_EXCEPTION ABAP程序:SAPLFCML4H_RUN_PRICES应用组件CO-PC-ACT 2. 物料账报错背景: CKMLCP运行结算时 3. 解决方案: 通过DEBUG查看错误的地方 OKTZ:分析原因为:可能打包或者配置传输时弄错 ...

SAP.David.Gao的博客 1856

Linq中Skip和Take用法(TakeWhile和SkipWhile用法)

首先解释一下Skip和Take都用来干嘛的。 1.Skip跳过指定数量的项,并获取剩余的项 2.Take提取制定数量的项 3.TakeWhile根据指定条件提出数据 4.SkipWhile根据指定条件跳过数据 实例如下: /// /// Take用法. /// public void Linq1() { int[] numbers = { 5, 4, 1

源代码 4149

PCRNet: Point Cloud Registration Network using PointNet Encoding

PCRNet算是在ModelNet40这种object-centric数据集上用deep-learning做配准最好入手的一篇文章了,整体架构涉及简洁明了,一句话描述就是简单粗暴,话不多说,直接上网络架构图: Work Flow: 首先对输入source (N×3N \times 3N×3)与template (M×3M \times 3M×3)进行PointNet操作,即MLP + max-pooling后,分别得到描述各自点云的维度为1024的global feature vector:Φ(PS).

dloading7的博客 1646

.NET(C#) Linq Skip和SkipWhile的使用

Linq是Language Integrated Query的简称,它是微软在.NET Framework 3.5里面新加入的特性,用以简化查询查询操作。本文主要介绍.NET(C#) 中Linq的Skip和SkipWhile操作符。 原文地址:.NET(C#) Linq Skip和SkipWhile的使用 ...

weixin_42098295的博客 520

共享单车数据分析与需求预测项目

除了自行车共享系统的有趣的实际应用之外,这些系统生成的数据特征使它们成为研究的有吸引力的对象。由于这些系统在交通、环境和健康问题中的重要作用,它们引起了极大的关注。Huber 回归器:一个对异常值具有鲁棒性的模型,CV 得分为 0.4660,表明它对此数据集可能不那么有效。代码中的内容cv_score就像您正在使用的机器学习模型的成绩单。它告诉您模型的表现如何。减少异常值的影响:它还可以减少异常值的影响,因为对数转换显着缩小了数据的范围。因此,cv_score平均分数表明您的模型的预测效果如何。

极光喵的博客 2944

bacnet 官方协议栈 bacnet-stack-0.8.2关于router例程BACnet MS/TP BACnet IP调试说明

bacnet 官方协议栈 bacnet-stack-0.8.2关于router例程mstp,bacnet ip调试说明

shufawangzhang的博客 2222

Linq中的TakeWhile和SkipWhile的介绍

 Linq中的SkipWhile 1、含义 (1)、对数据源进行枚举,从第一个枚举得到的元素开始,调用客户端的predicate (2)、如果返回true,则跳过该元素,继续进行枚举操作. (3)、但是,如果一旦predicate返回为false,则该元素以后的所有元素,都不会再调用predicate,而全部枚举给客户端. 2、实例

whazhl的专栏 668

【ROS2实体机械臂驱动】封装珞石ROS2驱动库ros2_rokae_driver_lib

这一篇文章将封装为,和之前一篇文章《ROS2 编译、打包、封装三方库(Knet为例)_ros插件编译成静态库-优快云博客》写的封装,区别在于优化了cmake dependencies和include等属性和宏定义,同时对于多库内部依赖的情况做了特定处理,更加方便外部调用。其中珞石的编译参考博主之前的文章rokae xCoreSDK C++测试使用,这里不再做赘述。通过这篇文章对于如何打包机械臂厂家提供的三方库做了进一步说明,方便用于不同机械臂厂家的三方库封装调用。!!

机器人梦想家 Bing Lee 1396

Linq之Sql中的Skip()、Take()

showlist = batchInfoList.OrderByDescending(a => a.BatchKey) .Select(a => a.BatchKey).Skip((pageNumber - 1) * PageNum.Value) .Take(PageNum.Value).ToList(); Select(a => a.BatchKey)根据字段BatchKey进行选择。并且设置OrderByDescending,根据字段BatchKey降序排列.

学者-微风 1830

【图像拼接】论文精读:As-Rigid-As-Possible Shape Manipulation(ARAP)

文章目录前言1.摘要2.算法的总体流程总结 前言 图像变形算法 1.摘要 论文提出了一个二维图形互动系统。图形是建立在三角形网格上的,用户只需移动几个网格顶点(限制顶点),系统通过最小化每个三角形的误差计算网格剩余顶点(自由顶点)的位置。 算法分两步: 适当旋转每个三角形。 调整大小。 关键是使用二次度量误差将最小化问题转换成线性方程组,然后再解这个方程组。 刚性形状变形是很难的,论文的研究使其变得简单。 2.算法的总体流程 总的流程分三步: 将图形用三角形网格覆盖 选择三个点(限制顶点) 操纵限

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 15万+

secureCRT 破解方法

3、输入注册信息打开keygen.exe,点击path,选择SecureCRT的安装目录(例如D:\VanDykeSoftware\Clients)的securecrt.exe打开,继续下一步打开LicenseHelper.exe,如下。1、注册SecureCRT9.1打开keygen.exe,出现以下问题(没有关掉安全防护,一双击打开,Windows会自动识别keygen.exe为bingdu并删除)打开桌面SecureCRT,此界面不输入内容,直接点击下一步。2、存储配置文件夹(可以默认安装)

逆水行舟 1万+

掌握 LINQ:C# .NET 中的 TakeWhile 和 SkipWhile

LINQ 中的 TakeWhile 和 SkipWhile 方法提供了一种有条件地处理序列的强大方法。它们允许您以声明方式表达复杂的逻辑,从而增强代码的可读性和可维护性。通过理解和利用这些方法,您可以轻松处理涉及数据过滤和操作的各种场景。

技术探索驿站 906

基于Python实现学习进度跟踪系统

{{ task }}: {{ "%.1f"|format(hours) }}小时

寒寒豆豆软件公司的博客 195

Linq 中的TakeWhile 和 SkipWhile

这两个概念容易搞混 理解了一番后 在这里写下便于记忆 SkipWhile 可以理解为如果条件满足 就一直跳过 知道不满足后 就取剩下的所有元素(后面的不会再判断) TakeWhile 可以理解为如果条件满足 就一直取值 直到不满足后 就丢掉剩下的所有元素(后面的不会再判断) int[] intAry = { 2, 4, 5, 8, 9, 11, 10, 20...

weixin_34007879的博客 169

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LINQ之Take, TakeWhile

目录Take() Take() Take()可以获取序列的指定部分。具体使用请看下面案例。 MSDN public static IEnumerable<TSource> Take<TSource>( this IEnumerable<TSource> source, int count ); 代码示例: public static class Program ...

lcy的博客 1808

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C# 集合操作的艺术:深入解析数据分区策略与高效筛选技巧(Skip、SkipWhile、Take、TakeWhile)

在C#中,LINQ(语言集成查询)提供了一种非常方便的方式来处理数据集合。本文将详细介绍四种数据分区方法:Skip、SkipWhile、Take、TakeWhile,并通过示例来演示它们的使用。

qq_35320456的博客 1566

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Linq的Skip和SkipWhile详细介绍

            int[] arr = { -32, 53, 5, -34, 56, 45, 34, 5, -34, 45, 2, 3, 6 }; var query = arr.Skip(5); Console.WriteLine("去除前五个"); foreach (var item in query) ...

hhw199112的博客 2976

LINQ 中常用函数使用: Take TakeWhile Skip SkipWhile Reverse Distinct

1,Take 方法 Take方法用于从一个序列的开头返回指定数量的元素。 string[] names = { "郭靖", "李莫愁", "欧阳晓晓", "黄蓉", "黄药师" }; //直接输出前3个元素 Console.WriteLine("Take方法直接输出前3个元素"); foreach (var name in ...

weixin_30314813的博客 286

Linq 中SkipWhile的含义,不可以乱用

尝试获取当前类型的所有属性,但想跳过某些特定类型的属性(例如,ICommand类型)。使用了SkipWhile方法来跳过第一个满足条件的连续属性。但SkipWhile的行为是只跳过“连续满足条件的元素”,一旦遇到不满足条件的元素,它会保留后续的所有元素,无论它们是否满足条件。如果你的意图是过滤掉所有ICommand类型的属性(而不是仅跳过连续的ICommand属性),应该使用Where方法,而不是SkipWhile。

踏上青云路的博客 323

C# LINQ TakeWhile 和 SkipWhile 方法详解

TakeWhile 从序列的开始返回元素,直到指定的条件第一次不满足为止。

XIOA小记 506

Linq中Take、TakeWhile、Skip、SkipWhile的比较

///token();             int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };             var first3Numbers = numbers.Take(3); //从第一个元素开始,获取三个 return的是前面的数             Console.WriteLine("First 3 numb

刘晓飞 1万+

无涯教程-Linq TakeWhile运算符

在LINQ中,只要指定的条件包含表达式,就使用TakeWhile运算符从数据源的列表/集合中获取元素。

无涯教程 902

C# Linq源码分析之Take(四)

本文主要对Take的优化方法进行源码分析,分析Take在配合Select,Where等常用的Linq扩展方法使用时候,如何实现优化处理。本文涉及到Select, Where和Take和三个方法的源码分析,其中Select, Where, Take更详尽的源码分析,请参考我之前写的文章。

weixin_43263355的博客 1326

数据库系统概念笔记——第4章 中级SQL

第4章 中级SQL 1.连接表达式 对于studenthetakes两个关系: student关系 ID name dept_name tot_cred 00128 Zhang Comp.Sci 102 12345 Shankar Comp.Sci. 32 19991 Brandt History 80 23121 Chavez Finance 110 44553 Peltier Physics 56 45678 Levy Physics 46 54321 Wilia

绝尘 1065

Linq(C#)中的【将数据分区】 :Skip、SkipWhile、Take、TakeWhile、Chunk

LINQ 中的分区是指将输入序列划分为两个部分的操作,无需重新排列元素,然后返回其中一个部分。下图显示对字符序列进行三种不同的分区操作的结果。第一个操作返回序列中的前三个元素。第二个操作跳过前三个元素,返回剩余元素。第三个操作跳过序列中的前两个元素,返回接下来的三个元素。

滴水成河,汇流成海 949
上一篇: ASP.NET先显示‘提示信息’然后再跳转---Page.ClientScript.RegisterStartupScript()
下一篇: EF基于方法的查询语法---Linq(很全很详细)
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值