当前位置:编程学习 > C#/ASP.NET >>

Linq学习笔记

Linq是Language-Integrated Query的简称,是设置在visual studio 2008上,纳入c#和visual basic语言延伸的强大查询功能.能容易的查询和更新数据,并且能支持多种数据存储.visual studio 2008提供集合使得Linq能查询.net Framework collections,SQL databases, ADO.NET Datasets, and XML documents.Linq 提供了如下的优点:
(1).Linq简化了查询,假如你知道了c#或者visual basic,那么你能轻松的使用Linq;
(2)Linq统一任何数据源的数据查询,你能查询xml文档,同样的方式你可以查询sql database,ado.net dataset,in-memory collection和其他分布或者本地的数据源
(3)Linq加强了相关数据和面向对象的联系
(4)Linq加快的开发和debug
下面就对自己学习的过程记录一些自己学习感受,望大家指出不足

所有的Linq查询有下面基本的3个行为构成:
1,包含数据源
2,创建查询
3,执行查询
这里需要特别注意的是,查询的执行严格区别于查询本身,换句话来说就是不会获得任何的数据仅仅通过常见查询,要执行的过程中才会获得.
 下面就是一段代码,表示了查询操作的3部分
//  Data source.
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

//  Query creation.
IEnumerable<int> numQuery =
    from num in numbers
    where (num % 2) == 0
    select num;

//  Query execution. 
foreach (int j in numQuery)
{
    Console.Write("{0,1} ", j);
}
下面对这3部分做进一步的解释:
The Data Source
上面例子中的数据源类型是数组,支持IEnumerable接口,是它作为Linq查询的数据源,IEnumerable能被迭代通过foreach,这是Linq查询是如何执行的.支持IEnumerable或者是一个继承于该接口的其他接口,如IQueryable被称为可查询的类型.除了次类可查询的类型,其他的类型例xml document,Linq提供了可查询的类型XElement
// Create a data source from an XML document.
// using System.Xml.Linq;
XElement contacts = XElement.Load(@"c:\myContactList.xml");
使用Linq to sql,你首先创建一个对象关系的映射通过O/R Designer,处理与database的通讯,并且Table支持IQueryable
// Create a data source from a SQL table.
// using System.Data.Linq;
DataContext db = new DataContext("c:\\northwind\\northwnd.mdf");
Table<Customer> Customers = db.GetTable<Customer>();

The Query
查询是想从数据源获得数据,查询可以指定什么信息应该被选择,被分类等并且什么类型应该被返回,一个查询语句至少应该包含2个语法元素from 和select
假如查询要返回一系列的值,查询变量必须是可查询的类型,最重要的是要集注查询变量本身不会采取任何行为,查询也不会返回数据.他仅仅是保存查询的信息,你创建了查询,当你去执行的时候才回获得数据

Query Execution
查询执行分为下面2类:
Deferred Execution(推迟执行)
当查询创建的时候查询变量本身知识存储查询的命令,真正意义上的查询被推迟到当你通过foreach循环在查询变量上迭代时候.
查询中返回一系列结果,查询变量本身不去拥有查询结果,着意味这你可以执行查询随你所需要,数据源没时刻更新,你也可以随时执行查询获得不同的数据.
Immediate Execution
与前面的不同,即使查询获得单独的一个值而且是立即的,例如Count,
Max,Average,First,这些查询立即获得一个单独的值,如下
int query = (from num in numbers
             where (num % 2) == 0
             select num).Count();
还有强制获得立即查询并且不是获得一个单独的值可以通过调用
ToList或者ToArray方法在一个查询变量身上
如下
List<int> query2 =
    (from num in numbers
     where (num % 2) == 0
     select num).ToList();
// or
var query3 =
    (from num in numbers
     where (num % 2) == 0
     select num).ToList();


转自:http://www.cnitblog.com/carternzj/archive/2007/07/31/31061.aspx
--------------------编程问答-------------------- 好,支持 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 顶起.. --------------------编程问答-------------------- loooooooook --------------------编程问答-------------------- 支持。以后多整点学习笔记上来 --------------------编程问答-------------------- 支持,开始学习!! --------------------编程问答-------------------- --------------------编程问答-------------------- 学习。。。。。。 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 我喜欢LINQ~~ --------------------编程问答-------------------- 什么呀 --------------------编程问答-------------------- 有问题请先GOOGLE,BAIDU --------------------编程问答-------------------- 比其他O/R框架设计都好 --------------------编程问答-------------------- 这样的学习笔记真的很好,顶你! --------------------编程问答-------------------- 顶你一下\! --------------------编程问答-------------------- 看懂了一半 --------------------编程问答-------------------- 我也喜欢LINQ --------------------编程问答-------------------- LINQ用起来很方便  --------------------编程问答-------------------- 同道中人 ,哈哈哈! --------------------编程问答-------------------- 学习+顶 --------------------编程问答-------------------- 不错。有具体的实例吗? --------------------编程问答-------------------- 定                                             下 --------------------编程问答-------------------- 顶一个!支持! --------------------编程问答-------------------- linq是我刚接触的新知识,你的笔记对我十分有用 ,非常感谢 --------------------编程问答-------------------- 希望LZ多发一些Linq的案例代码。谢谢。顶 --------------------编程问答-------------------- 学习中,貌似Linq很好用 --------------------编程问答-------------------- 恩,不错,辛苦楼主了 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 不错。。 --------------------编程问答-------------------- 学习,谢谢楼主! --------------------编程问答-------------------- zhichia                 --------------------编程问答-------------------- 来个实历 --------------------编程问答-------------------- 学习了呵呵呵!!! --------------------编程问答-------------------- 很不错哦 --------------------编程问答-------------------- 好好学习,天天向Linq --------------------编程问答-------------------- 哇……这么久了,怎么没有人跟贴……
窘。。。。 --------------------编程问答-------------------- 哇……还没结贴…… --------------------编程问答-------------------- 学习。。。。 --------------------编程问答-------------------- ........................ --------------------编程问答-------------------- 网上一大把的,比这好的好很多 给你链接:http://www.cnblogs.com/lifepoem/archive/2011/10/25/2223765.html
http://www.cnblogs.com/cxd4321/archive/2009/09/28/1575890.html
http://www.cnblogs.com/liuning8023/archive/2011/11/25/2263101.html
很不错的文章... --------------------编程问答-------------------- 看了个开头,先回帖再接着看! --------------------编程问答-------------------- 好,支持!!!! --------------------编程问答-------------------- 你说的这些东西都是网上随便翻出来的,我想要找个稀罕的。。。。
   你有dblinq 的 LINQ TO MYSQL 相关的教程吗? --------------------编程问答-------------------- 支持一下。。。 --------------------编程问答-------------------- 楼主好人啊!
补充:.NET技术 ,  LINQ
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,