C#之Linq、where()、FindAll()的区别
C#之Linq、where()、FindAll()的区别
对于实现了IEnumerable接口的类、类型、集合可以使用Linq、Linq的扩展方法where()、FindAll()来查询符合谓词约束的数据。这三者之间执行的方式是不一样的,同样的数据同样的查询条件返回的结果也不相同。先上代码再分析。
public static void LaterSelect()
{
var names = new List { "Nino", "Alberto", "Juan", "Mike", "Phil"
};
var namesWithJ = from n in names
where n.StartsWith("J")
orderby n
select n;
var namesWithJforWhere = names.Where(n => n.StartsWith("J"));
var namesWithJforFindAll = names.FindAll(n => n.StartsWith("J"));
Console.WriteLine("First iteration by Linq:");
foreach (string name in namesWithJ)
{
Console.WriteLine(name);
}
Console.WriteLine("First iteration by names.Where():");
foreach (var name in namesWithJforWhere)
{
Console.WriteLine(name);
}
Console.WriteLine("First iteration by names.FindAll():");
foreach (var name in namesWithJforFindAll)
{
Console.WriteLine(name);
}
Console.WriteLine();
names.Add("John");
names.Add("Jim");
names.Add("Jack");
names.Add("Denny");
Console.WriteLine("Second iteration by Linq:");
foreach (string name in namesWithJ)
{
Console.WriteLine(name);
}
Console.WriteLine("Second iteration by names.Where():");
foreach (var name in namesWithJforWhere)
{
Console.WriteLine(name);
}
Console.WriteLine("Second iteration by names.FindAll():");
foreach (var name in namesWithJforFindAll)
{
Console.WriteLine(name);
}
}
输出结果:
分析
从输出结果可以看出,Linq和where两种方式的结果是相同的,说明这两者之间没有区别,当定义一个查询后并没有立即执行查询而是在执行foreach循环的时候才执行查询而且是在每一次执行foreach循环的时候去执行查询,这样只要数据是变化的结果就会是变化的。但是在一些情况下,这是不可行的。调用扩展方法 ToArray()、ToEnumerable()、ToList()等可以改变这个操作,使返回的结果始终一致,这里是在调用To*这些方法时执行了一次查询而且不是延迟查询。FindAll()方法和Linq、where是有区别的,FindAll()不是延迟加载或者说延迟查询,当定义一个查询后就立即查询出所有符合条件的数据保存在变量中。
C#之Linq、where()、FindAll()的区别的更多相关文章
- 缓冲区 粘包 029 send 和sendall 的区别 find 和 findall 的区别
一.tcp : 属于长连接 与客户端连接了之后 其他客户端需要等待 要连接另外一个 必须优雅的断开前面这个客户的连接. 二.缓冲区 :为了避免网络传输信号不通畅而是程序一直停留在消息发送状态而不向下进 ...
- (转)selenuim-webdriver注解之@FindBy、@FindBys、@FindAll的区别
selenium-webdriver中获取页面元素的方式有很多,使用注解获取页面元素是其中一种途径, 方式有3种:@FindBy.@FindBys.@FindAll.下文对3中类型的区别和使用场景进行 ...
- @FindBy、@FindBys、@FindAll的区别
原文地址http://blog.csdn.net/tea_wu/article/details/21080789 selenium-webdriver中获取页面元素的方式有很多,使用注解获取页面元素是 ...
- selenuim-webdriver注解之@FindBy、@FindBys、@FindAll的区别
selenium-webdriver中获取页面元素的方式有很多,使用注解获取页面元素是其中一种途径, 方式有3种:@FindBy.@FindBys.@FindAll.下文对3中类型的区别和使用场景进行 ...
- LINQ to Entities 和LINQ to Objects 的区别
本文资料来源:http://www.codeproject.com/Articles/246861/LINQ-to-Entities-Basic-Concepts-and-Features) LINQ ...
- Python:正则表达式(一):search()、match()、findall() 的区别
以前一直觉得正则很难,不会用,今天试验了几个方法,整理总结了一下,简洁明了. 简单来讲,正则就是 提取一段特征数据,用(.*?)代替. 自己总结的特点&区别: (.*) 贪婪匹配,会尽可能的往 ...
- 第二节: 比较EF的Lambda查询和Linq查询写法的区别
简介 在前面EF的介绍中,曾多次提到过EF可以使用Lambda和Linq来完成对数据库的访问,这两种的语法的具体使用和注意事项在前面的DotNet进阶的系列章节中已经详细介绍过了,本次借着EF章节,重 ...
- linq to sql 和linq to php 的区别
linq to sql 这是自.net框架3.5版本以上做出了相关规定. linq to php .Net的linq库的忠实移植到PHP 这个库使得大量使用匿名函数在PHP 5.3中引入的功能.因此, ...
- python爬虫笔记之re.match匹配,与search、findall区别
为什么re.match匹配不到?re.match匹配规则怎样?(捕一下seo) re.match(pattern, string[, flags]) pattern为匹配规则,即输入正则表达式. st ...
- Linq的查询操作符
Linq有表达式语法和调用方法的语法.两者是可以结合使用,通常情况下也都是结合使用.表达式语法看上去比较清晰而调用方法的语法实现的功能更多,在此文章中介绍的是表达式语法.方法语法可以看System.L ...
随机推荐
- (转)c运行库、c标准库、windows API的区别和联系
C运行时库函数C运行时库函数是指C语言本身支持的一些基本函数,通常是汇编直接实现的. API函数API函数是操作系统为方便用户设计应用程序而提供的实现特定功能的函数,API函数也是C语言的函数实现的 ...
- IOS上架App Store商店步骤
苹果官方在2015年05-06月开发者中心进行了改版,网上的APP Store上架大部分都不一样了,自己研究总结一下,一个最新的上架教程以备后用. 原文地址:http://www.16css.com/ ...
- C_C++指针指针应用详解
前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其 ...
- (转)把Sublime Text 2 加入右键菜单(带图标),Edit with Sublime Text
转自 http://www.turen.me/archives/509 Sublime Text 2 是现在很受大家欢迎的编辑器了,不仅是在web前端,在书定简单的php.Js等代码时,也是相当的好用 ...
- ORACEL上传BLOB,深度遍历文件夹
// uploadingDlg.cpp : 实现文件// #include "stdafx.h"#include "uploading.h"#include & ...
- HDoj-1163- Digital Roots
Problem Description The digital root of a positive integer is found by summing the digits of the int ...
- angular项目中各个文件的作用
原文地址 https://www.jianshu.com/p/176ea79a7101 大纲 1.对angular项目中的一些文件的概述 2.对其中一些文件的详细描述 2.1.package.json ...
- DC综合:划分与编码风格
划分与编码风格 合理的设计划分和好的HDL编码风格对成功的综合影响很大. 逻辑划分是成功综合(和布局布线,如果布图是层次化的)的关键. 综合划分 "分而治之" 把复杂的设计化简为更 ...
- 自定义控件三部曲之动画篇(一)——alpha、scale、translate、rotate、set的xml属性及用法
前言:这几天做客户回访,感触很大,用户只要是留反馈信息,总是一种恨铁不成钢的心态,想用你的app,却是因为你的技术问题,让他们不得不放弃,而你一个回访电话却让他们尽释前嫌,当最后把手机号留给他们以便随 ...
- php实现求二进制中1的个数(右移、&、int32位)(n = n & (n - 1);)
php实现求二进制中1的个数(右移.&.int32位)(n = n & (n - 1);) 一.总结 1.PHP中的位运算符和java和c++一样 2.位移运算符看箭头方向,箭头向左就 ...