C#3.0 LINQ 查询语法

ccoderlh 2008-01-17 03:02:42
首先来看一个很简单的LINQ查询例子,查询一个int 数组中小于5的数字,并按照大小顺序排列:

class Program
{
static void Main(string[] args)
{
int[] arr = new int[] { 8, 5, 89, 3, 56, 4, 1, 58 };

var m = from n in arr where n < 5 orderby n select n;
foreach (var n in m)
{
Console.WriteLine(n);
}
Console.ReadLine();
}
}

上述代码除了LINQ查询语法外,其他都是我们所熟悉的语法,而LINQ查询语法跟SQL查询语法很相识,除了先后顺序。


Q:为何 LINQ 查询语法是以 from 关键字开头的,而不是以 select 关键字开头的?select 开头这种写法跟SQL的写法更接近,更易懂呀?

A:简单来说,为了IDE的智能感知(Intelisence)这个功能,select 关键字放在后面了。

编程语言以 select 开头写LINQ查询语法不是没出现过,你如果使用过2005年的VB9 CTP 版本,那时候VB9的LINQ查询语法就是 select 关键字在前面,但是 select 关键字在前面,在做智能感知(Intelisence)时候就很头大。经过微软IDE组的权衡,确定了把 from 关键字放在最前面。

比如:你看 http://blog.joycode.com/saucer/archive/2005/09/16/63513.aspx 这篇博客,那时候 VB9 LINQ的查询语法还是 select 参数在最前面。不过后来 VB9 测试版改成了跟 C# 一样的做法, from 关键字放在最前面了。

更详细的解释,来自装配脑袋

假设你要书写这样的代码:Select p.Name, p.Age From p In persons Where xxx ,代码是一个个字符输入的。

我们在写到 p in persons 之前,p 的类型是无法推测的,所以写 Select p. 的时候,Name之类的属性不会弹出智能提示来。

这样就需要先去写 From 这句,再回来写 Select。

微软IDE组经过反复考虑决定,还不如就把 Select 写到后面了。于是编程语言中的写法就确定这样来写了。

VB9 的这个变化可以参看这篇博客:

Select/From vs. From/Select revisited...


我们再来看一个稍稍复杂的LINQ查询:

在我们罗列的语言字符串中,我们希望按照字符长短,分类罗列出来,实现代码如下:

static void Main(string[] args)
{
string [] languages = {"Java","C#","C++","Delphi","VB.net","VC.net","C++ Builder","Kylix","Perl","Python"};

var query = from item in languages
orderby item
group item by item.Length into lengthGroups
orderby lengthGroups.Key descending
select lengthGroups;

foreach (var item in query)
{
Console.WriteLine("strings of length {0}",item.Key);
foreach (var val in item)
{
Console.WriteLine(val);
}
}
Console.ReadLine();
}

其中的 into 关键字表示 将前一个查询的结果视为后续查询的生成器,这里是跟 group by 一起使用的。

LINQ中的Group by不要跟 SQL 中的Group by 混淆,SQL 由于是二维结构,Group by 的一些逻辑受二维结构的约束,无法象 LINQ 中的Group by 这么灵活。

转自:http://blog.joycode.com/ghj/archive/2007/06/07/103960.aspx
...全文
634 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
benbenhuo 2010-07-24
  • 打赏
  • 举报
回复
结帖率:15.60%...
SlaughtChen 2008-07-24
  • 打赏
  • 举报
回复
学习了
jimodushi 2008-04-18
  • 打赏
  • 举报
回复
学习
dupoutVIP 2008-04-01
  • 打赏
  • 举报
回复
关注中!!
BernardSun 2008-03-26
  • 打赏
  • 举报
回复
学习
lt5225262 2008-03-20
  • 打赏
  • 举报
回复
Linq是个好工具啊,希望有更多的例子.
g012345678 2008-03-18
  • 打赏
  • 举报
回复
以后在软件开发中要用到这样的写法了
wanabe 2008-02-18
  • 打赏
  • 举报
回复
3Q
lsslu 2008-01-23
  • 打赏
  • 举报
回复
简单明了的知道了LINQ怎么写~
多谢~~
支持~
顶~
loworth 2008-01-23
  • 打赏
  • 举报
回复
好 jf
yitian130 2008-01-22
  • 打赏
  • 举报
回复
up
wzt226 2008-01-20
  • 打赏
  • 举报
回复
谢谢,受教了. !以后请多写一写.我现在就去试验一下.
cncharles 2008-01-20
  • 打赏
  • 举报
回复
很好很强大. 啥时候 delphi for win32 有这样的概念
HarleyTung 2008-01-20
  • 打赏
  • 举报
回复
很好,学习!
第1章(\ch01) 示例描述:介绍Visual Studio 2008的使用。 HelloWorld 第一个C#控制台应用程序 第2章(\ch02) 示例描述:学习C#基本语法实例。 CharString 演示字符和字符串的使用 Enum 演示枚举类型的使用 FuncOverride 演示函数重载的使用 Integer 演示数值类型的使用 UseArray 演示数组定义和使用 UseFuc 演示函数的调用 UseIf 演示If、Switch选择语句使用 UseWhile 演示while、loop、for循环语句使用 第3章(\ch03) 示例描述:学习C#面向对象开发实例。 AnimalPerson 演示C#类的使用 Anonymous 演示匿名类的使用 ClsIndexeer 演示类索引器的使用 ExtMethod 演示扩展方法的使用 Inherit 演示类继承的实例 NewMethod 演示new关键字覆盖父类方法实例 UseClass 演示C#类的使用实例 UseClassProperty 演示类属性(Property)的使用 UseDElegate 演示委托的使用 UseException 演示异常的使用 UseInterface 演示接口的使用 第4章(\ch04) 示例描述:介绍C#中常用集合类的使用。 CreateHashTable 演示创建Hash表实例 AddHashItem 演示添加元素到Hash表实例。 UseHashItem 演示Hash表属性、方法的使用实例 IndexList 演示通过索引访问List列表元素实例 UseList 演示List列表属性、方法的使用实例 FindList 演示在List列表中搜索元素实例 RemoveList 演示删除List列表元素实例 HashProperty 演示Hash表属性的使用实例 RemoveArrayList 演示删除ArrayList元素实例 SearchArrayList 演示在ArrayList中查找元素实例 UseArrayList 演示ArrayList属性、方法的使用实例 CreateDic 演示Dictionary字典的使用实例 第5章(\ch05) 示例描述:学习Windows Form程序和窗体控件的使用。 SimpleForm 第一个窗体应用程序实例 UseButton 演示Button按钮控件的使用实例 UseCheckBox 演示CheckBox复选框控件的使用实例 UseComboBox 演示ComboBox下拉列表控件的使用实例 UseGroupBox 演示GroupBox分组控件的使用实例 UseLabel 演示Label标签控件的使用实例 UseListBox 演示ListBox列表控件的使用实例 UseMaskedTextBox 演示MaskedTextBox格式文本框控件使用实例 UseMenu 演示MenuStrip菜单控件使用实例 UseMonthCaledar 演示MonthCaledar日历控件使用实例 UsePanel 演示Panel面板控件使用实例 UseRadioButton 演示RadioButton单选框控件使用实例 UseStatuStrip 演示StatuStrip状态栏控件使用实例 UseTabControl 演示TabControl分页控件使用实例 UseTextBox 演示TextBox文本框控件使用实例 UseToolStrip 演示ToolStrip工具栏控件使用实例 第6章(\ch06) 示例描述:学习简单窗体应用程序具体开发实例。 SimpleTextEditor 简易文本编辑器实例 第7章(\ch07) 示例描述:学习多文档窗体应用程序具体开发实例。 AdvTextEditor 改进的多文档文本编辑器实例 第8章(\ch08) 示例描述:学习自定义控件的开发和使用。 IntegerTextBox 演示数字文本框自定义控件的开发和使用实例 UseCaculatorUC 演示计算器自定义控件的开发和使用实例

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧