瞄了一眼C#3.0

起先是想看一下Anders的一个访谈,关于LINQ的.听完访谈后,看到有Dan Fernandez(Visual C#的Product Manager)的一篇关于LINQ文章的链接,跑了进去,紧接着瞄了一样C#3.0的Spec.估计在MS内部已经差不多整出来就等发布了.Anders那些关于LINQ的演示实在太cool了.
LINQ的MS官方定义如下:
LINQ stands for Language INtegrated Query and in a nutshell, it makes query and set operations, like SQL statements first class citizens in .NET languages like C# and VB. 
LINQ的意思就是整合了查询的语言,是SQL语句在.NET中语言中称为一等公民.当然这个语言不仅仅是C#,是所有.NET Language.当然还是必须躺在.NET FrameWork上,这也是老盖的目的啊,把程序员绑在MS上,下午我还在打趣,要是MS垮了,俺们的日子可咋过啊.
废话少说,摘几段代码爽一下:
None.gif using  System;
None.gif
None.gif
using  System.Query;
None.gif
None.gif
using  Danielfe;
None.gif
None.gif 
None.gif
None.gif
class  Program
None.gif
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif
InBlock.gif    
static void Main(string[] args)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
string[] aBunchOfWords = dot.gif{"One","Two""Hello"
InBlock.gif
ExpandedSubBlockEnd.gif  
"World""Four""Five"}
;
InBlock.gif
InBlock.gif     
InBlock.gif
InBlock.gif        var result 
=    
InBlock.gif
InBlock.gif            from s 
in aBunchOfWords // query the string array 
InBlock.gif

InBlock.gif            where s.Length 
== 5     // for all words with length = 5
InBlock.gif

InBlock.gif            select s;               
// and return the string
InBlock.gif
InBlock.gif        
InBlock.gif
InBlock.gif        
//PrintToConsole is an Extension method that prints the value
InBlock.gif

InBlock.gif        result.Print();
InBlock.gif
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedBlockEnd.gif}

None.gif
None.gif

这个编辑器还是C#1.1的,认不出C#3.0的关键字var,from,where,select.上面一段代码的作用是从一个数组中选出长度为5的字符串然后打印.
那么如何从数据库中查询那?下面这段代码是从NorthWind数据库的客户表(Customers)查出合约名称(ContactName)长度等于5的客户,然后打印.是不是很酷?不知道C#3.0将来会做成什么样子,不过单纯从这段代码来看的话,db.GetTable<Customs>()应该是把数据从数据库中一次性捞到内存中,然后用where过滤.不过这样的效率实在令人担忧,有几百万个客户,再大的内存也受不了.当然这只是从只言片语的代码中看,C#3.0肯定会对效率有比较完美的solution,Anders一定会做到.
None.gif using  System;
None.gif
None.gif
using  System.Query;
None.gif
None.gif
using  Danielfe;
None.gif
None.gif
using  System.Data.DLinq;  // DLinq is LINQ for Databases
None.gif

None.gif
using  nwind;  // Custom namespace that is tool generated 
None.gif

None.gif 
None.gif
None.gif
class  Program
None.gif
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif
InBlock.gif    
static void Main(string[] args)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif
InBlock.gif        Northwind db 
= new Northwind("Data Source=(local);Initial Catalog=Northwind;Integrated Security=True");   
InBlock.gif
InBlock.gif        Table
<Customers> allCustomers = db.GetTable<Customers>();
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        var result 
= 
InBlock.gif
InBlock.gif                from c 
in allCustomers
InBlock.gif
InBlock.gif                where c.ContactTitle.Length 
== 5
InBlock.gif
InBlock.gif                select c.ContactName;
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        result.Print();   
InBlock.gif
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedBlockEnd.gif}

None.gif
None.gif

更多的LINQ代码示例查看 101LINQSamples
我们知道C#2.0在C#1.1的基础上增加了Generics,Anonymous Methods,Iterators和Partial Types.C#3.0会增加什么特性那?看了一下C#3.0的SPEC,新增加的特性如下:
1.Implicitly typed local variables---var,跟JavaScript中的var类似,允许通过初始值来确定变量的类型.
2. Extension methods.允许通过添加附加方法的方式扩展已有的类型来构造新的类型.
3. Lambda expressions .是匿名方法的演化,提供增强的类型推断并增加到委托和表达式树的转化.
4. Object initializers.对象的构造和初始化
5. Anonymous types
6.Implicitly typed arrays
7.Query expressions
8.Expression trees
长达26页的Spec对上述八个新的或者增强的特性进行了详细的描述,C#有26章了.
C#3.0 SPEC的 下载

转载于:https://www.cnblogs.com/Farseer1215/archive/2005/11/25/284767.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值