posts - 3, comments - 2, trackbacks - 0, articles - 2

2007年8月1日

     摘要: 通过《深入理解C# 3.0的新特性(2):Extension Method - Part I》介绍,我们知道了在C# 中如何去定义一个Extension Method:它是定义在一个Static class中的、第一个Parameter标记为this关键字的Static Method。在这一部分中,我们进一步来认识Extension Method的本质... ...  阅读全文

Artech 2007-07-19 13:47 发表评论

文章来源:http://www.cnblogs.com/artech/archive/2007/07/19/823847.html

posted @ 2007-08-01 21:04 小小牛 阅读(48) | 评论 (0)编辑 收藏

2007年7月31日

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();

 

posted @ 2007-07-31 23:26 小小牛 阅读(561) | 评论 (0)编辑 收藏

2007年6月13日

我华中科技大学,05级,写点东西算是回顾一下,望大家指点
我邮箱nzjemail@126.com
QQ:287960333
学习是交流的过程,我觉得自己写点东西是对自己的再学习,别人看了或许也能有点收获,别人给予自己的评论即是对自己指点,望大家共同进步

posted @ 2007-06-13 12:46 小小牛 阅读(62) | 评论 (0)编辑 收藏