1.什么是LINQ

LINQ是语言集成查询(Language Integrated Query),这项技术是在.net 3.5就已经引入的技术,极大的方便了数据的查询,他可以支持数据库、XML、ADO.NET、字符串等数据源,不必再为每一种数据源或者数据格式学习专门的查询语法,方便了开发人员的操作。

查询的基本流程:确定数据源-创建查询表达式-执行查询

一个简单的例子体验:

定义数据源:var  nums=new int[]{1,2,3,4,5,6,7,8,9,10};

创建查询表达式:var selectExp=from num in nums

where num>5

select num;

执行查询:foreach(var num  in selectExp)

Console.WriteLine(num);

数据源的获取方式有很多,比如

定义的字符串

string strs=nameString .Split(',');

使用ADO.Net获取的数据源

string sql="select count * from BookInfo";

DataAdapter da =new DataAdapter(conn,sql);

DataTabel dt=da.Fill(new DataSet()).Tables[0];

直接获取的文本文件

string[] strs=File.ReadAllLines(@"路径");

注意点:

1.关于创建查询表达式

查询表达式,只是记录了需要查询的语句,并没有从数据源了获取数据,也就是没有执行查询的操作,只是体现了一个存储的作用,这也就是“延迟执行”

2.关于可查询的类型

对于可以使用LINQ的类型,继承自接口IEnumrable<T>接口或者IQueryable<T>类型,所以对于其他的数据源,需要采用相关的技术,将数据源记载到指定的类型当中。例如LINQ TO XML ,需要将XML数据源加载到XElement类型中后,XElement dataElement=XElement.Load(@"class.xml")然后对这个类型进行相应的查询操作,其他的技术还有LINQ TO SQL等等

3.执行查询

多采用Foreach进行循环遍历,将结果查询出来,此时将会操作数据源,对于查询变量,只是用来记录查询的表达式的(重要的事情重复一遍),那么问题来了,有没有什么方法可以让查询立即执行而不是延迟呢?

使用ToList或者ToArray,直接将查询的结果保存在内存的变量中

var selectExp=(from num in nums

where num>5

select num).ToList();

2.初识LINQ

对于大多数人,看到LINQ相信都是感觉到异常的亲切吧,是不是感觉特别像SQL语句呢,他们确实很像,而且包括大多数的关键字的用法也都是一样的,只是在书写的顺序上存在一些的差异

一般的LINQ的查询语法主要形式:

var temp=from ss in Strs

where ss=="小赵"

select ss;

LINQ中的语法形式主要分为查询语法和方法语法,查询语法使用起来更加像SQL,更加的方便阅读,同时使用更见的灵活,但是方法语法更加的简洁,在.NET的CLR中并没有对查询语法的支持,CLR主要的机制就是方法的调用,所以CLR在编译的时候,会将查询语法转换方法语法的。而且在有些时候,使用查询语法很难办到的,比如说Max()、Count()等就比较麻烦,所以在使用的时候可以采用组合式的查询方式。对于聚合函数这类的方法,使用的时候本身就需要将数据在内部进行遍历,也就是已经调用过foreach语句了,所以也是属于立即执行的。

查询语法常用的关键字

select:对数据进行投影

where:where是用来进行书写条件进行过滤的

order by :用来进行排列查询的数据的顺序的(order by temp.ID ),如果想要使用倒叙排列的话,在后面添加desending即可

group... by:用来将数据源进行分组,不需要投影

List<Book> bookList=new List<Book>(){

new Book(){BookId=1,BookName="一个为什么",BookAuthor="nature"}

,new Book(){BookId=2,BookName="十个为什么",BookAuthor="nature"}

,new Book(){BookId=3,BookName="千个为什么",BookAuthor="nature1"}

,new Book(){BookId=1,BookName="万个为什么",BookAuthor="nature1"}

}

var books =from book in bookList

group book by book.Author

foreach(var bookGroup in books)

{

Console.WriteLine(bookGroup.Key);

  foreach(var book in bookGroup)

{

Console.WriteLine(book.Name);

}

}

如果想要对分组后的结果进行操作,可以使用into关键字

var bookExp =from book in bookList

group book by book.Author

into bookGroup

where bookGroup.Count()>0

order by BookId

select bookGroup

此外可以使用嵌套查询,也就是Sql中的子查询,进行操作

var bookExp=from bookGroup in ( from book in bookList group book by book.BookAuthor)

where bookGroup.Count==3

select bookGroup

join...in:连接,相当于SQL中的内连接

from book in bookList join price in priceList where price.ID==book.ID

select new { BookId=book.Id,BookName=book.Name,BookPrice=price.Price}

Linq初探的更多相关文章

  1. 29.LINQ初探

    本页内容: 1.LINQ查询语言的组成部分: 2.使用LINQ方法语法: 3.排序查询结果 orderby 字句: 4.聚合运算符: 5.查询复杂对象: 6.投影:在查询中创建新对象: 7.Disti ...

  2. Linq To Sql 使用初探

    最近有数据处理需要,就是那种从数据库中把数据取出来 ,对其中的部分字段做一些处理再吐回去的工作,从同事那里学习到了,这中活最适合使用 Linq to Sql 这种方式,不用搭建框架,不用自建实体,直接 ...

  3. C#进阶系列——DDD领域驱动设计初探(三):仓储Repository(下)

    前言:上篇介绍了下仓储的代码架构示例以及简单分析了仓储了使用优势.本章还是继续来完善下仓储的设计.上章说了,仓储的最主要作用的分离领域层和具体的技术架构,使得领域层更加专注领域逻辑.那么涉及到具体的实 ...

  4. C#进阶系列——DDD领域驱动设计初探(七):Web层的搭建

    前言:好久没更新博客了,每天被该死的业务缠身,今天正好一个模块完成了,继续来完善我们的代码.之前的六篇完成了领域层.应用层.以及基础结构层的部分代码,这篇打算搭建下UI层的代码. DDD领域驱动设计初 ...

  5. WCF初探-2:手动实现WCF程序

    1.前言 上一篇,我们通过VS自带的模板引擎自动生成了一个wcf程序,接下来我们将手动实现一个wcf程序.由于应用程序开发中一般都会涉及到大量的增删改查业务,所以这个程序将简单演示如何在wcf中构建简 ...

  6. WCF初探-9:WCF服务承载 (下)

    在WCF初探-8:WCF服务承载 (上)中,我们对宿主的概念.环境.特点做了文字性的介绍和概括,接下来我们将通过实例对这几种寄宿方式进行介绍.为了更好的说明各寄宿环境特点,本实例采用Http和net. ...

  7. WCF初探-10:WCF客户端调用服务

    创建WCF 服务客户端应用程序需要执行下列步骤: 获取服务终结点的服务协定.绑定以及地址信息 使用该信息创建 WCF 客户端 调用操作 关闭该 WCF 客户端对象 WCF客户端调用服务存在以下特点: ...

  8. WCF初探-11:WCF客户端异步调用服务

    前言: 在上一篇WCF初探-10:WCF客户端调用服务 中,我详细介绍了WCF客户端调用服务的方法,但是,这些操作都是同步进行的.有时我们需要长时间处理应用程序并得到返回结果,但又不想影响程序后面代码 ...

  9. WCF初探-13:WCF客户端为双工服务创建回调对象

    前言: 在WCF初探-5:WCF消息交换模式之双工通讯(Duplex)博文中,我讲解了双工通信服务的一个应用场景,即订阅和发布模式,这一篇,我将通过一个消息发送的例子讲解一下WCF客户端如何为双工服务 ...

随机推荐

  1. [转载]如何解决failed to push some refs to git

    Administrator@PC-20150110FGWU /K/cocos2d/yc (master) $ git push -u origin master To git@github.com:y ...

  2. 基于<最简单的基于FFMPEG+SDL的视频播放器 ver2 (采用SDL2.0)>的一些个人总结

    最近因为项目接近收尾阶段,所以变的没有之前那么忙了,所以最近重新拿起了之前的一些FFMPEG和SDL的相关流媒体播放器的例子在看. 同时自己也用FFMPEG2.01,SDL2.01结合MFC以及网上罗 ...

  3. Android ListView使用BaseAdapter与ListView的优化 (转至 http://www.open-open.com/lib/view/open1339485728006.html)

    在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作.也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用户的操作,而是里面的控件要获得用户的焦点.读者可 ...

  4. tRNA 二级结构预测可视化

    tRNAdb 收录了来自104个物种的623条tRNA 序列,从数据库中下载对应物种的tRNA 序列和二级结构,以人为例 打开下面的链接 http://trna.bioinf.uni-leipzig. ...

  5. 函数preg_replace()与str_replace()

    如截图,preg_replace()的用法 <?php $str="as2223adfsf0s4df0sdfsdf"; echo preg_replace("/0/ ...

  6. 防止网页被别站用 iframe嵌套

    将下面的代码加到您的页面 <head></head> 位置即可: <script language="javascript"> <!-- ...

  7. hbase学习 rowKey的设计-4

    访问hbase table中的行,只有三种方式: 1 通过单个row key访问 2 通过row key的range 3 全表扫描 Hadoop Sequence File 文中可能涉及到的API: ...

  8. Python学习笔记(三)——迭代

    知识点 迭代 迭代 什么是迭代呢?和递归又有什么区别呢? 根据维基百科和网上的资料: 迭代:迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果.每一次对过程的重复被称为一次“迭代”, ...

  9. js 停止事件冒泡 阻止浏览器的默认行为

    在前端开发工作中,由于浏览器兼容性等问题,我们会经常用到“停止事件冒泡”和“阻止浏览器默认行为”. 浏览器默认行为: 在form中按回车键就会提交表单:单击鼠标右键就会弹出context menu. ...

  10. C#操作MSMQ(消息队列)

    using System; using System.Collections.Generic; using System.Text; using System.Messaging; using Sys ...