专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » linq语法:C#3.0 LINQ 查询语法 »正文

linq语法:C#3.0 LINQ 查询语法

来源: 发布时间:星期三, 2008年9月10日 浏览:120次 评论:0
今天一起来看看C#3.0中的一些新的知识点把,为您贡献,www.,首先来看一个很简单的LINQ查询例子,查询一个int数组中小于5的数字,并按照大小顺序排列:
classProgram
{
staticvoidMain(string[]args)
{
int[]arr=newint[]{8,5,89,3,56,4,1,58};
varm=fromninarrwheren>5orderbynselectn;
foreach(varninm)
{
Console.WriteLine(n);
}
Console.ReadLine();
}
}
上述代码除了LINQ查询语法外,其他都是我们所熟悉的语法,而LINQ查询语法跟SQL查询语法很相识,除了先后顺序。
Q:为何LINQ查询语法是以from关键字开头的,而不是以select关键字开头的?select开头这种写法跟SQL的写法更接近,更易懂呀?
A:简单来说,为了IDE的智能感知(Intelisence)这个功能,select关键字放在后面了。
编程语言以select开头写LINQ查询语法不是没出现过,你如果使用过2005年的VB9CTP版本,那时候VB9的LINQ查询语法就是select关键字在前面,但是select关键字在前面,在做智能感知(Intelisence)时候就很头大。经过微软IDE组的权衡,确定了把from关键字放在最前面。
比如:你看http://blog.joycode.com/saucer/archive/2005/09/16/63513.aspx这篇博客,那时候VB9LINQ的查询语法还是select参数在最前面。不过后来VB9测试版改成了跟C#一样的做法,from关键字放在最前面了。
更详细的解释,来自装配脑袋
假设你要书写这样的代码:Selectp.Name,p.AgeFrompInpersonsWherexxx,代码是一个个字符输入的。
我们在写到pinpersons之前,p的类型是无法推测的,所以写Selectp.的时候,Name之类的属性不会弹出智能提示来。
这样就需要先去写From这句,再回来写Select。
微软IDE组经过反复考虑决定,还不如就把Select写到后面了。于是编程语言中的写法就确定这样来写了。
我们再来看一个稍稍复杂的LINQ查询:
在我们罗列的语言字符串中,我们希望按照字符长短,分类罗列出来,实现代码如下:
staticvoidMain(string[]args)
{
string[]languages={\"Java\",\"C#\",\"C++\",\"Delphi\",\"VB.net\",\"VC.net\",\"C++Builder\",\"Kylix\",\"Perl\",\"Python\"};
varquery=fromiteminlanguages
orderbyitem
groupitembyitem.LengthintolengthGroups
orderbylengthGroups.Keydescending
selectlengthGroups;
foreach(variteminquery) [Page]
{
Console.WriteLine(\"stringsoflength{0}\",item.Key);
foreach(varvalinitem)
{
Console.WriteLine(val);
}
}
Console.ReadLine();
}
其中的into关键字表示将前一个查询的结果视为后续查询的生成器,这里是跟groupby一起使用的。
LINQ中的Groupby不要跟SQL中的Groupby混淆,SQL由于是二维结构,Groupby的一些逻辑受二维结构的约束,无法象LINQ中的Groupby这么灵活。

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: