Linq是在.Net3.5之后首次引入的,这种查询语言简单易学,可用范围非常广泛在学着之前,一直用在数据库操作之上,但是在学习这节课之后才发现,凡是实现泛型的接口类型都可以使用linq,简单来说就是实现IEnumerable<T>接口。那么什么是泛型?什么是非泛型?

先说说非泛型,是.Net2.0之前一直在使用的集合类,它的特点在于它在存储数据的时候不需要指定数据的类型,甚至在一个集合内可以存储多个不同的类型数据,因为这些容器类是接受system.object的,也就是说,只要是基础与object的数据,非泛型容器类都可以进行存储,但是编译器在存储数据的时候会在系统底层自动进行装箱操作,在提取数据的时候又需要我们人工进行拆箱操作,这样也就增加了代码发生错误的几率。CLR(CLR是公共语言运行库(Common Language Runtime)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集等),并保证应用和底层操作系统之间必要的分离。CLR存在两种不同的翻译名称:公共语言运行库和公共语言运行时。)在装箱拆箱操作时,会进行大量的内存转化操作,这就会降低运行时的执行速度,必须再提一点的是,这些经典的类不是类型安全的,它们本身就是为了操作object类而开发出来的,因此使用这些类会导致低性能的代码,特别是在操作数组数据时。接下来说说泛型容器类,它和非泛型的最大的区别是类型安全的,在定义一个泛型时,需要先定义该泛型所保存的数据的数据类型,在添加数据的时候如果所添加的数据和定义的不一致,编译器就会报错。因为已经定义数据类型的原因,在使用就不需要进行装箱拆箱操作。

回转linq,linq可以有三种写法,第一种是直接使用from in等c#操作符的写法,格式大体为:var result=from item in container where BooleanExpression select item;第二种为:var result=container.where(o=>对容器内数据的筛选).select item;第三种就是利用Enumerable类型和匿名方法,例:

static void main()

{

string[] str={"11","22","33"};

Func<string,bool> search=delegate(string game){return game.Contains(" ");};

Func<string,string> items=delegate(string s){return s;};

var result=str.where(search).select(items);

}

总之,linq是一种方便好用的语言,他可以是我们在对数据进行操作的时候少些很多代码,节省下很多时间。

《精通C#》第十二章 Linq的更多相关文章

  1. PRML读书会第十二章 Continuous Latent Variables(PCA,Principal Component Analysis,PPCA,核PCA,Autoencoder,非线性流形)

    主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:00:49 我今天讲PRML的第十二章,连续隐变量.既然有连续隐变量,一定也有离散隐变量,那么离散隐变量是 ...

  2. <构建之法>第十一章、十二章有感

    十一章:软件设计与实现 工作时要懂得平衡进度和质量.我一直有一个困扰:像我们团队这次做 男神女神配 社区交友网,我负责主页的设计及内容模块,有个队友负责网站的注册和登录模块,有个队友负责搜索模块,有个 ...

  3. sql 入门经典(第五版) Ryan Stephens 学习笔记 (第六,七,八,九,十章,十一章,十二章)

    第六章: 管理数据库事务 事务 是 由第五章 数据操作语言完成的  DML ,是对数据库锁做的一个操作或者修改. 所有事务都有开始和结束 事务可以被保存和撤销 如果事务在中途失败,事务中的任何部分都不 ...

  4. 《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记

    第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系后代,ash shell是Unix系统上原来地Bourne shell的简化版本 ...

  5. 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高

    第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...

  6. [CSAPP笔记][第十二章并发编程]

    第十二章 并发编程 如果逻辑控制流在时间上是重叠,那么它们就是并发的(concurrent).这种常见的现象称为并发(concurrency). 硬件异常处理程序,进程和Unix信号处理程序都是大家熟 ...

  7. perl5 第十二章 Perl5中的引用/指针

    第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用  子程序模板七.数组与子程序八.文件句 ...

  8. 第十二章——SQLServer统计信息(4)——在过滤索引上的统计信息

    原文:第十二章--SQLServer统计信息(4)--在过滤索引上的统计信息 前言: 从2008开始,引入了一个增强非聚集索引的新功能--过滤索引(filter index),可以使用带有where条 ...

  9. 第十二章——SQLServer统计信息(3)——发现过期统计信息并处理

    原文:第十二章--SQLServer统计信息(3)--发现过期统计信息并处理 前言: 统计信息是关于谓词中的数据分布的主要信息源,如果不知道具体的数据分布,优化器不能获得预估的数据集,从而不能统计需要 ...

随机推荐

  1. java反射小例子

    package com.txwsqk.reflect; public class Car { private String brand; private String color; private i ...

  2. 向苹果App Store提交新应用的图文教程(转)

    当你克服重重困难终于开发出了自己的App,下一步就是向App Store提交应用了,这时应该如何操作呢?我的App真的准备好提交了?我敢肯定这些问题将会浮现在你的脑海.基于这篇教程,我将告诉你一个完整 ...

  3. 基于layerpage 前后端异步分页

    #下载jquery 和 layerpage1.核心分页方法 laypage({ cont: 'page1', //容器.值支持id名.原生dom对象,jquery对象. pages: json.tot ...

  4. vue路由的使用

    ue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用.vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来.传统的页面应用 ...

  5. C# Socket编程笔记

    1.按惯例先来介绍下socket      Windows中的很多东西都是从Unix领域借鉴过来的,Socket也是一样.在Unix中,socket代表了一种文件描述符(在Unix中一切都是以文件为单 ...

  6. 20160929001 Guid生成

    全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.   using System; namespace GUID测试 ...

  7. GOAndroid的安装和配置

    android环境的配置还是比较复杂的,特别对于我这样一直使用mfc的程序员来说,有很多观念上需要转变.好在配置成功后就能够不断复用,那么这样的问题值得整理出来 一.安装jdk 二.解压adt-bun ...

  8. 微信OAuth2.0网页授权

    1.OAuth2.0网页授权 关于网页授权的两种scope的区别说明 1.以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页 ...

  9. The first DP!

    P3399 丝绸之路 题目背景 张骞于公元前138年曾历尽艰险出使过西域.加强了汉朝与西域各国的友好往来.从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚. ...

  10. Java-密码加密

    介绍两种密码加密的方法: 这两种很常见可以再百度随意找到. 1.摩斯密码:说道密码加密不得不提的方法.很是经典. 首先说一下他的对照表,直接上图. 核心思想就是替换明文密码,将字符对应的替换成-与.两 ...