linq读书笔记2-查询内存中的对象
上次我们说到了linq对数组内容的检索,自.net2.0以后,泛型成了很常见的一种应用技术,linq对泛型的检索也提供了完善的支持
如对list类型的支持,范例如下:
class Program
{
static void Main(string[] args)
{
List<Books> samplebooks = new List<Books>() {
new Books{Id=1,Name="book1"},
new Books{Id=2,Name="book2"},
new Books{Id=3,Name="book3"}
};
var book = samplebooks.Where(p => p.Name.Contains("2"))
.Select(p=>p.Name);
foreach (var item in book)
{
Console.WriteLine(item);
}
Console.Read();
}
}
class Books
{
public int Id { get; set; }
public string Name { get; set; }
}
以上的例子只是我们很常见的一个场景,那么linq是不是支持我们.net中的所有类型呢,事实上linq支持所有实现了IEnumable<T>接口的集合,.net中的大部分集合都实现了该接口,但是并不是所有的集合都实现 了该接口事实上只有支持强类型胡集合才实现了该接口,如数组,list,字典等,都是强类型的,所以我们可以对这些对象应用linq to object技术。
对于非泛型的集合,如arrarlist,dataset等集合并没有实现IEnumable<T>接口但是却实现了IEnumabler接口,这样的话是不是不能应泛型技术呢,当然这也还是有办法去处理 的,我们后面会提到。
下面我们看一些linq的基本的操作:
where操作:
功能:条件过滤
操作符声明:
public static IEnumerable<T> where<T>{
this IEnumerable<T> source,
Func<T,bool> predicate
}
predicate的第一个元素表明了将参与判断的元素,若该元素判断通过将返回为true,否则返回false
通过对source的观察我们也可以发现,where实质为一扩展方法,这个通过this关键字已经很明显的暴露了出来。而predicate的实现实质则是通过委托来做处理,通过对参数predicate的观察也可以很明显的反应出来.
同时where还提供了一个重载的版本:
public static IEnumerable<T> where<T>{
this IEnumerable<T> source,
Func<T,int,bool> predicate
}
predicate的第二个参数表示当前元素在源序列中的索引位置(以0为开始)
以下为该重载的一个范例代码:
IEnumerable<Books> book=samplebooks.where(book,index)=>((book.Name.Contains("2") )&&( (index&1)==1));
以上代码即为找出名称中包含2且在序列中奇数位置的图书
linq读书笔记2-查询内存中的对象的更多相关文章
- 《深入java虚拟机》读书笔记之Java内存区域
前言 该读书笔记用于记录在学习<深入理解Java虚拟机--JVM高级特性与最佳实践>一书中的一些重要知识点,对其中的部分内容进行归纳,主要是方便之后进行复习. 运行时数据区域 Java虚拟 ...
- 《深入分析Java Web技术内幕》读书笔记之JVM内存管理
今天看JVM的过程中收获颇丰,但一想到这些学习心得将来可能被遗忘,便一阵恐慌,自觉得以后要开始坚持做读书笔记了. 操作系统层面的内存管理 物理内存是一切内存管理的基础,Java中使用的内存和应用程序的 ...
- linq读书笔记3-操作符之select与selectmany
linq对数据的查询方式的表达形式主要有两种: var demo =from p in pList where p.id=*** select p; var demo =pList.where(p=& ...
- OCP读书笔记(13) - 管理内存
SGA 1. 什么是LRULRU表示Least Recently Used,也就是指最近最少使用的buffer header链表LRU链表串联起来的buffer header都指向可用数据块 2. 什 ...
- 【Deep Learning读书笔记】深度学习中的概率论
本文首发自公众号:RAIS,期待你的关注. 前言 本系列文章为 <Deep Learning> 读书笔记,可以参看原书一起阅读,效果更佳. 概率论 机器学习中,往往需要大量处理不确定量,或 ...
- 《深入理解java虚拟机》读书笔记——垃圾收集与内存分配策略
可回收判定两种算法 引用计数法(Reference Counting):引用为0时可回收. 可达性分析法(Reachability Analysis): 从GCRoots对象到这个对象不可达. GCR ...
- 剑指Offer读书笔记(持续更新中)
(1)定义一个空的类型,里面没有不论什么成员变量和成员函数,对该类型求sizeof,得到的结果是多少? 答案是1.空类型的实例中不包括不论什么信息,本来求sizeof应该是0,可是当我们声明该类型实例 ...
- 《深入理解 Java 虚拟机》读书笔记:Java 内存区域与内存溢出异常
前言 最近开始看这本书,记得前段时间拿起这本书的时候,心情是相当沉重的!当时的剧本是这样的-- 内景.家里 - 下午 我(画外):唉,有点无聊啊!(偶然撇过书架)这么多书得看到什么时候啊,要不要拿一本 ...
- 《深入理解 Java 虚拟机》读书笔记:Java 内存模型与线程
正文 由于计算机的处理器运算速度与它的存储和通信子系统速度的差距太大了,大量的时间都花费在磁盘 I/O.网络通信或者数据库访问上,导致处理器在大部分时间里都处于等待其他资源的状态.因此,为了充分利用计 ...
随机推荐
- Ext tpl 造成 store不能正确加载
最近维护别人写的代码的时候,遇到了这么个情况 找原因找到了这行代码的身上 tpl: '<tpl for="."><div ext:qtip="{name ...
- Android--Toast时间
/** * * 显示toast,自己定义显示长短. * param1:activity 传入context * param2:word 我们需要显示的toast的内容 * param3:time le ...
- Spark2.0编译
Spark2.0编译 1 前言 Spark2.0正式版于今天正式发布,本文基于CDH5.0.2的Spark编译. 2 编译步骤 #2.1 下载源码 wget https://github.com/ap ...
- C++程序设计实践指导1.10二维数组元素换位改写要求实现
改写要求1:改写为以单链表和双向链表存储二维数组 改写要求2:添加函数SingleLinkProcess()实现互换单链表中最大结点和头结点位置,最小结点和尾结点位置 改写要求3:添加函数Double ...
- 【solr基础教程之二】索引
一.向Solr提交索引的方式 1.使用post.jar进行索引 (1)创建文档xml文件 <add> <doc> <field name="id"&g ...
- ajax 传值 中文乱码问题
使用encodeURI编码内容 var Path = encodeURI("中文.xls"); url: "ashx/Data.ashx?Path =" + P ...
- 我的第一个comet长连接例子
<!doctype html> <html> <head> <meta charset="utf-8"> <meta http ...
- new String(byte[])和byte[]toString() 的区别
byte[]字节数组的toString()获得的字符串和使用new String(byte[])构造一个新的字符串,这两个字符串是不一样的.Java对象都继承于Object,Object中提供了toS ...
- POJ 1190 生日蛋糕(DFS)
生日蛋糕 Time Limit: 1000MSMemory Limit: 10000KB64bit IO Format: %I64d & %I64u Submit Status Descrip ...
- 理解 backbone.js 中的 bind 和 bindAll 方法,关于如何在方法中指定其中的 this,包含apply方法的说明[转载]
转载自:http://gxxsite.com/content/view/id/132.html 在backbone.js的学习过程中,被bind和bindAll弄得有点晕,这里包括underscore ...