`

C#3.0 LINQ 查询语法

阅读更多

C#3.0 LINQ 查询语法

2007年6月7日 17:19 - (阅读:5542;评论:7) <link href="http://blog.joycode.com/ghj/Services/Pingback.aspx" rel="pingback"> <!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"> <rdf:Description rdf:about="http://blog.joycode.com/ghj/archive/2007/06/07/103960.aspx" dc:identifier="http://blog.joycode.com/ghj/archive/2007/06/07/103960.aspx" dc:title="C#3.0 LINQ 查询语法" trackback:ping="http://blog.joycode.com/ghj/services/trackbacks/103960.aspx" /> </rdf:RDF> -->

首先来看一个很简单的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 这么灵活。

分享到:
评论

相关推荐

    C#3.0 Linq基础学习与高级应用技巧教程

    C# 3.0引入了Language Integrated Query (LINQ),这是一种强大的编程模型,它将查询语句集成到C#语言中,使得数据访问更加简洁、高效。本教程将深入探讨LINQ的基础概念以及高级应用技巧。 一、LINQ简介 LINQ是.NET ...

    C#3.0(包括Linq和Lambda)

    总的来说,通过学习"C#3.0(包括Linq和Lambda)",开发者可以掌握现代C#编程的核心技能,无论是在日常开发还是在处理复杂的数据查询场景中,都能游刃有余。这个视频教程结合PDF资料,将帮助你深入理解这些概念,并...

    C#3.0新语法总结

    LINQ是C# 3.0引入的重要特性,提供了统一的查询语法,支持查询对象、XML和数据库等。它包含`LINQ to Objects`(用于查询内存中的对象集合)、`LINQ to XML`(用于XML数据的查询)和`LINQ to SQL`(用于数据库查询)...

    C# 3.0 LinQ入门系列

    C# 3.0 林林总总的 LINQ(Language Integrated Query,语言集成查询)是一个强大的数据查询工具,它允许开发者在编程语言中直接编写SQL风格的查询,极大地提高了代码的可读性和效率。这个入门系列将逐步引导你了解并...

    Pro C# 3.0 And Linq

    《专业C# 3.0与LINQ》这本书不仅覆盖了上述技术细节,还提供了大量的实例和深入的技术分析,旨在帮助读者掌握C# 3.0和.NET 3.0的核心概念,以及如何有效地利用LINQ进行数据处理和查询。通过阅读本书,读者将能够提升...

    C#_3.0_LinQ入门系列

    **Language Integrated Query (LINQ)**,即语言集成查询,是Microsoft在.NET Framework 3.5和C# 3.0中引入的一项重大创新。LINQ提供了一种统一的方式来查询各种类型的数据源,包括内存中的集合、XML文档以及数据库。...

    C#3.0和LINQ(英文版PPT)

    通过这些特性,C# 3.0极大地增强了开发者的生产力,使得代码更易于理解和维护,尤其在处理数据查询时,LINQ提供了强大的抽象和简化的查询语法。无论是处理数据库、XML还是其他数据结构,C# 3.0和LINQ的结合都为...

    asp.net 3.0 linq 新用法

    2. **查询编写**:使用C#或VB.NET的查询表达式或方法语法,可以方便地对数据库进行查询。例如: ```csharp var result = (from customer in db.Customers where customer.City == "London" select customer).To...

    c#3.0入门经典教程

    1. 查询表达式:C# 3.0引入了类似SQL的查询语法,可以用于操作各种数据源,如数组、集合、数据库等,极大简化了数据查询。 2. 方法语法:除了查询表达式,还可以使用方法语法进行LINQ操作,例如`Enumerable.Select...

    C#3.0_与_LINQ PPT

    C# 3.0 和 LINQ(Language Integrated Query,语言集成查询)是.NET Framework 3.0中的重要特性,它们极大地增强了C#编程语言的功能,尤其是处理数据的能力。本资源包含的"Visual C# 3.0_与_LINQ.ppt"是一个关于这个...

    C# 3.0:A Beginner’s Guide

    查询表达式是C# 3.0中引入的用于简化数据查询和处理的语法结构。它提供了类似于SQL的语法,使开发者能够以更直观、更自然的方式处理集合和序列数据。 ### 动态调用 动态调用是C# 3.0中的一个高级特性,它允许在...

    C#3.0完全自学宝典(C#加入了许多新的特性)

    6. **查询表达式(LINQ)**:语言集成查询是C# 3.0的一大亮点,提供了对数据库、XML、数组等数据源进行查询的统一语法,极大提升了查询效率和代码的可读性。例如,`from`、`where`、`select`关键字用于构建查询。 7...

    C#3.0 & LINQ.ppt

    - **LINQ to SQL**:允许开发者使用C#查询语法直接与SQL数据库交互,将SQL语句转换为C#表达式。 - **LINQ to XML**:提供了强大的XML处理能力,可以直接在XML文档上执行查询和操作。 举例来说,以下是一个简单的...

    C# 3.0与.NET 3.5高级编程.rar

    LINQ是一种集成在语言中的查询语法,它使得在各种数据源(如数据库、XML文档、集合等)上进行查询变得统一且易于理解。扩展方法则允许向已存在的类型添加新方法,而无需继承或使用装饰器模式。 .NET Framework 3.5...

    C#3.0 in a nutshell

    1. **语言集成查询(LINQ)**:LINQ是C# 3.0的一个重大改进,它允许开发者使用一致的语法来查询各种数据源,如数据库、XML文档和集合。LINQ包括LINQ to Objects、LINQ to SQL和LINQ to XML,大大简化了数据访问和...

    C# 3.0完全自学宝典 源文件

    C# 3.0引入了语言集成查询(Language Integrated Query, LINQ),这是一个革命性的新功能,它允许开发者使用一种统一、简洁的语法来处理各种数据源,如数据库、XML文档、集合等。LINQ提供了强大的查询能力,显著提高...

    C# 3.0 入门系列

    通过使用LINQ,我们可以用一致的语法查询对象,极大地提高了代码的可读性和效率。 3. **扩展方法**: 扩展方法允许我们向已存在的类型添加新方法,而无需继承或使用装饰者模式。这对于增强库的功能非常有用,例如`...

    Programing C# 3.0(5th edition)

    在C# 3.0中,最重要的新特性之一是 LINQ (Language Integrated Query,语言集成查询)。LINQ允许开发者以一种直观、类型安全的方式处理数据,无论数据源是数据库、XML文档还是其他集合。通过使用LINQ,代码变得更加...

    C#3.0完全自学宝典.rar

    Linq(Language Integrated Query)是C#3.0引入的另一大革新,它是对数据库查询、集合操作和XML处理的一种统一、高效的编程模型。Linq支持多种数据源,包括SQL数据库、XML文档、数组和集合。通过使用Linq,开发者...

    C# 3.0 锐利体验系列课程(3):查询表达式LINQ(1).rar

    这个压缩包文件“C# 3.0 锐利体验系列课程(3):查询表达式LINQ(1).rar”显然是一份关于C# 3.0中LINQ查询表达式的教学资源,旨在帮助学习者深入理解并掌握这一强大的数据查询工具。 LINQ是一种在C#中进行数据查询的...

Global site tag (gtag.js) - Google Analytics