`
WPComming
  • 浏览: 58909 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

LINQ简记(3):子句

 
阅读更多
LINQ查询表达式的子句如select,where,from等都是比较简单的子句,相信各位多练习练习,再结合MSDN的例子,基本上是可以理解的,因此,本文只挑几个有代表性的,以及有些难理解的子句来简述一下。
一、where子句。
在SQL中,筛选语句常用的表示方式如“select * from Users where uName = 'DMIN'”,这个SQL语句就带有WHERE子句,其实,在LINQ中也类似,只不过放的位置不一样。请看下面的例子。

输出的结果为:


复合条件的写法与if等判断语句一致,LINQ遵循C#语法,再看看下面一个例子,从字符串数组中选出以T开头并且长度大于等于3的。

输出结果如下:


二、group子句。

这是一个有点儿难度的子句,很多朋友可能搞不清楚它查询后返回的是什么。这样,我们还是用一个例子来说明吧。

首先,声明一个类,包含两个字段:学生姓名和成绩。

接着,我们把学生的名字以首字母进行分组。



调试运行,然后注意查看“输出窗口”中的内容。


因此,我们可以得到这样的结果:

1、分组查询返回一个GroupedEnumerable;

2、每个GroupedEnumerable中包含N个Grouping。

我们发现这些类在对象浏览器中找不到,GroupedEnumerable是内部类,但Grouping通过反射也没找着,那它们的结构到底如何?

现在,我们通过断点调试,进一步了解它们。

从截图中我们看到,IGrouping<TKey,TElement>有一个Key属性,其实它就是存储我们用来进行分组的键,怎么理解呢?

回到上面的例子,我们以什么作为分组的依据?对,姓名字段的第一个个字母,其实是Char类型,因此,比如上面的,“Z”就是一个组的键,在这个组里面,都是以Z开头的对象的集合。

我们可以下一个不成文的结论:分组结果中的所谓Key就是我们用于分组所依据的字段或具体的值。

在实现IGrouping<TKey,TElement>的类中,显然会实现GetEnumerator方法,也就是说我们可以把它foreach出来,上图中看到,每个元素(TElement)说白了就是已经被分组的对象,上例中即为Student对象。

而每个组中其实包含Lookup<TKey,TElement>类。

呵呵,有些混乱了,我们可以这样总结:

执行了LINQ分组查询后,得到的所有分组的集合A,而A中的每个成员就是一个组G1、G2……而G1中就是被分到该组的对象O1、O2……可能用一个图来表示会直观一点。

现在,我们把上面的代码改一下。


输出结果如下:


分享到:
评论

相关推荐

    Linq之旅:Linq入门详解(实例)

    **Linq之旅:Linq入门详解(实例)** 在.NET框架中,Language Integrated Query(Linq)是一项强大的技术,它允许开发者使用一种自然、简洁的方式来查询数据,无论数据源是数据库、XML文档还是集合。本篇文章将深入...

    LINQ Unleashed: for C# (Unleashed) (Paperback - Jul 24, 2008)

    3. LINQ to SQL:这是一层抽象,允许开发者使用C#代码与关系数据库交互,自动将C#对象映射到数据库表,简化数据库访问。 4. LINQ to XML:在XML处理方面,LINQ提供了强大的API,可以方便地创建、修改和查询XML文档...

    2008.精通LINQ数据访问技术:基于C# 侯利军

    《精通LINQ数据访问技术:基于C#》是由侯利军编著的一本专业书籍,主要针对想要深入理解和掌握LINQ(Language Integrated Query,语言集成查询)技术的开发者。LINQ是.NET Framework 3.5引入的一项创新特性,它允许...

    java种菜源码-swift-linq-examples:C#的101个LINQ示例转换为Swift

    3 中的 101 个 LINQ 示例 将端口重写为 . 将 Swift 与其他编写的 LINQ 示例进行比较: 如果您正在寻找一种用于在 iOS 或 OSX Swift 3.0 应用程序中使用 .NET Web 服务的简单类型 API,请查看 ServiceStack 的 . 运行...

    Visual Studio 2008开发新特性系列课程(4):VS2008新特性之LINQ实战

    3. LINQ的关键概念: - 查询表达式:一种类似SQL的语法,用于在代码中编写查询。 - LINQ提供程序:针对不同数据源实现的适配器,如SQL提供程序和XML提供程序。 - LINQ操作符:包括Select、Where、Join、GroupBy等...

    2008.精通LINQ数据访问技术:基于C#

    本书共分为13章,分别介绍了LINQ的基本语法、LINQ查询操作的三个步骤、LINQ查询子句的规则和使用方法、LINQ查询操作如筛选操作、投影操作、集合操作、聚合操作等。还详细介绍了使用LINQ to SQL查询和处理SQL Server...

    calcite-linq4j-1.2.0-incubating.jar

    calcite-linq4j-1.2.0-incubating.jar

    LinqInAction.SourceCode

    3. LINQInAction源代码结构: 源代码包含的ReadMe.txt文件可能提供了关于如何运行和理解示例的说明,而LinqInAction文件夹则包含了按章节组织的各个示例代码。这些代码涵盖了各种LINQ用法,例如: - 基本查询操作...

    apache kylin4.0.1 源码编译所需jar包

    apache-kylin-4.0.1 源码所需jar包,一键打包...calcite-linq4j-1.16.0-kylin-r5.jar calcite-core-1.16.0-kylin-r5.jar opensaml-2.6.6.jar spring-security-saml2-core-1.0.2.RELEASE.jar commons-httpclient-3.1.jar

    linq-fns:Type LINQ for Javascript,由TypeScript编写

    linq-fns 用于以TypeScript编写JavaScript的.NET LINQ函数。 :high_voltage: 提供可重用的Queryable变量,并使用谓词集合进行延迟执行。 :hammer: 包含大多数原始的.NET方法和一些其他方法。 :hammer: 支持...

    Linq基础语法与高级应用技巧系列教程

    Linq基础语法与高级应用技巧系列教程 Linq是.NET Framework 3.5中的一种语言集成查询语言,它提供了一种统一的方式来查询多种数据源,如数据库、XML文件、集合对象等。Linq的出现使得开发者可以使用相同的语法来...

    linq数据库LINQ的演变及其对C#.pdf

    3. LINQ to XML:用于处理XML文档,提供了更简洁、强大的API来创建、修改和查询XML。 4. LINQ to Objects:用于在内存中的集合上执行查询,如数组、列表等。 四、LINQ对C#的影响 1. 更强的类型安全:LINQ查询...

    100多个Linq例子

    **标题:“100多个Linq例子”** **概述:** Linq(Language Integrated Query,语言集成查询)是.NET框架中的一个强大工具,它引入了一种新的查询编程模型,允许开发者在C#和Visual Basic等语言中直接进行数据查询...

    ch03-linq的各类高级查询视频教学.rar

    《LINQ的各类高级查询视频教学》是针对编程爱好者和专业人士设计的一套深入学习教程,主要聚焦于.NET框架中的Language Integrated Query(LINQ)技术。本教程以视频形式呈现,旨在帮助初学者和有一定基础的开发者更...

    vs2008视频教程3:VS2008新特性之LINQ入门

    3. LINQ to Objects:用于查询.NET集合,如数组、列表等。它可以让你以一种声明式的风格处理内存中的数据结构,而不必使用循环和条件判断。 4. LINQ to DataSet:允许在DataSet对象上执行查询,提供了更灵活的数据...

    linq教程

    3. LINQ to Objects: LINQ to Objects用于查询任何实现了IEnumerable或ICollection接口的对象,如列表、数组等。它可以直接在内存中的数据上进行操作,无需与数据库或其他外部数据源交互。 4. LINQ to SQL: ...

    CG.Linq.CosmoDb:其他CodeGator软件包使用的CosmoDb扩展

    CG.Linq.CosmoDb:它有什么作用? 该软件包包含其他CodeGator软件包使用的CosmoDb扩展。常用类型: CG.Linq.CosmoDb.Repositories.Options.CosmoDbRepositoryOptions CG.Linq.CosmoDb.Repositories....

    System.Linq.Dynamic:这是用于.Net 4.0动态语言功能的Microsoft程序集

    动态LINQ由...提供支持 该库由 该软件包已弃用(不再维护) 改用 动态Linq: : 动态Linq(EF核心): : 动态Linq(EF 6): : GitHub: : 什么是Linq Dynamic系统? 使用此动态LINQ库,我们可以执行以下操作...

    linq学习资料及源码实例

    3.延迟执行:LINQ查询不会立即执行,而是在需要结果时才进行,这提高了性能,因为数据处理可以等到数据准备好时才进行。 4.匿名类型:在LINQ查询中,可以创建匿名类型来临时存储查询结果,无需预先定义具体类型。 5....

Global site tag (gtag.js) - Google Analytics