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-查询内存中的对象,布布扣,bubuko.com

时间: 2024-10-24 18:30:08

linq读书笔记2-查询内存中的对象的相关文章

linq读书笔记3-操作符之select与selectmany

linq对数据的查询方式的表达形式主要有两种: var demo =from p in pList where p.id=*** select p; var demo =pList.where(p=>p.id=***) select p; 以上是linq最近常见的两种表达形式.linq支持多种操作符的操作,下面对主要的常操作符进行说明: select 与selectmany select操作符声明: public static IEnumerable<s> select<T,S&g

深度理解java虚拟机读书笔记(二)HotSpot Java对象创建,内存布局以及访问方式

内存中对象的创建.对象的结构以及访问方式. 一.对象的创建 在语言层面上,对象的创建只不过是一个new关键字而已,那么在虚拟机中又是一个怎样的过程呢? (一)判断类是否加载.虚拟机遇到一条new指令的时候,首先会检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号代表的类是否被加载.解析并初始化.如果没有完成这个过程,则必须执行相应类的加载. (二)在堆上为对象分配空间.对象需要的空间大小在类加载完成后便能确定.之后便是在堆上为该对象分配固定大小的空间.分配的方式也有两种:

《深入理解Java虚拟机》读书笔记:Java内存区域

xmind文件下载地址 <深入理解Java虚拟机>读书笔记:Java内存区域,布布扣,bubuko.com

Effective C++读书笔记之十二:复制对象时勿忘其每一个成分

Item 12:Copy all parts of an object 如果你声明自己的copying函数,意思就是告诉编译器你并不喜欢缺省显示中的某些行为.而编译器会对"你自己写出copying函数"做出一种复仇的行为:既然你拒绝它们为你写出copying函数,如果你的代码不完全,它们也不会告诉你.结论很明显:如果你为class添加一个成员变量,你必须同时修改copying函数.如果你忘记,编译器不太可能提醒你. 一下提供一种正确的模版: class Date{...}; class

Guava学习笔记: guava中的对象封装操作

Guava学习笔记: guava中的对象封装操作 转载:http://outofmemory.cn/java/guava/base/Objects 我们在开发中经常会需要比较两个对象是否相等,这时候我们需要考虑比较的两个对象是否为null,然后再调用equals方法来比较是否相等,google guava库的com.google.common.base.Objects类提供了一个静态方法equals可以避免我们自己做是否为空的判断,示例如下:         Object a = null;  

如何保证一个类在内存中的对象唯一性?

我发现就算同一个答案,但提问的方式不同, 往往会对回答造成干扰或者影响, 貌似高考的时候老师也说过差不多的话, 如果这题目是问:请描述单例设计模式的实现步骤,那估计就能答出来了. 解决的问题:保证一个类在内存中的对象唯一性. 比如:多程序读取一个配置文件时,建议配置文件封装成对象. 会方便操作其中数据,又要保证多个程序读到的是同一个配置文件对象, 就需要该配置文件对象在内存中是唯一的.Runtime()方法就是单例设计模式进行设计的. 如何保证对象唯一性呢? 思想:1,不让其他程序创建该类对象.

《游戏引擎架构》读书笔记1-游戏引擎中的C++

3月底,我暂时结束了北京的工作,从原来的公司离职,主要是为了学习游戏开发的底层知识和3D引擎相关的内容,并进行技术转型,为了鞭策自己的学习,未来博客更新会比较频繁,现阶段主要是<游戏引擎架构>读书笔记系列和unity学习笔记系列. <游戏引擎架构>在两年前就买了,而且自己也大体的看过一遍,因为自己想学习引擎的底层知识,所以重新又找出了这本书再读一遍,并把根据自己的理解写一些读书笔记在这里与大家交流,另外因为想有一个新的开始,近期都会在博客园这里写技术博客了,前些日子搞了个自己的网站

第二十一章、使用查询表达式来查询内存中的数据

什么是语言集成查询(LINQ) 对从应用程序代码中查询数据的机制进行了“抽象”.这个功能称为“语言集成查询”(Language Integrated Query). LINQ的设计者大量借鉴了关系数据库管理系统(例如Microsoft SQL Server)的处理方式,将“数据库查询语句”与“数据在数据库中的内部格式”分隔开.LINQ的语法和语义和SQL很像,具有许多相同的优势.要查询的数据的内部结构发生改变后,不必修改查询代码.注意,虽然LINQ和SQL看起来很像,但LINQ更加灵活,而且能处

读书笔记--关于Cocoa框架中的类

Chapter 10 Cocoa Classes iOS编程时, 实际是进行Cocoa编程. 所以必须熟悉Cocoa, 必须知道Cocoa是什么, 它能够做什么, 你和Cocoa如何进行"交流". Cocoa是一个庞大的Framework, 被分割成若干较小的Framework. 任何iOS编程人员都需要花费一定时间来熟练Cocoa. Cocoa中含有一些主要的规则和组件, 最好是以它们为主线来学习Cocoa. Cocoa大部分类都是OC写的, 虽然OC类和Swift类能相互转换.但S