LINQ最具突破性的优势在于将文本查询与对象操作完美集成,它让查询数据和操作对象一样安全和轻松。查询(Query)是LINQ的核心概念之一。

  传统意义上的数据查询语言,通常是比较易懂,具有一定语义的文本。

  例如,在SQL查询语法中,用如下的SQL语句从数据库表Student中查询所有学生的姓名。传统的查询语言,通常由查询关键字来定义特定的功能,指定数据源、查询结果、筛选条件等。

  例如,下面代码中的select和from是关键字,分别用来指定要查询的结果和数据源:

 select Student.Name
 from Student

  LINQ中的查询和传统的查询有一些相似之处,它同样可以采用具有一定语义的文本来表示,就如上一篇《1.2 如何使用LINQ》中示例代码的queryResult一样,这种方式在LINQ中成为查询表达式。

  另外,LINQ中的查询同时是一个类型为IEnumerable<T>或IQueryable<T>的对象,所以可以通过一种使用对象的方式(使用属性、调用方法等)使用它,这种方式在LINQ中称为查询方法。

  LINQ查询的目的是从指定的数据袁总查询满足符合特定条件的数据元素,并且根据需要对这些查询的元素进行排序、连接等操作。所以LINQ查询包括如下几个主要元素:

LINQ查询的主要元素
数据源

数据远表示LINQ查询将从哪里查找数据,它通常是一个或多个数据集,每个数据集包含一系列的元素。

数据集是一个类型为IEnumerable<T>或IQueryable<T>的对象,可以对它进行枚举,遍历每一个元素。

此外,它的元素可以是任何数据类型,所以可以表示任何数据的集合。

目标数据

数据源中的元素并不一定是查询所需要的结果。

例如,对于一个学生信息集合中:

 查询A只是查询学生的姓名,查询B要下旬学生的姓名和各科成绩,查询C则需要学生各科成绩的总分(需要另外计算),而不是原始数据中的各科成绩。

目标数据用来指定查询的具体想要的是什么数据。在LINQ中,它定义了查询结果数据集中元素的具体类型。

筛选条件

筛选条件定义了对数据源中元素的过滤条件,只要满足条件的元素才作为查询结果返回。

筛选条件可以是简单的逻辑表达式表示,也可以用具有复杂逻辑的函数表示。

附加操作

附加操作表示一些其他的具体操作。

比如,对查询结果进行排序、计算查询结果的最值和求和、对查询结果进行分组等。

  其中,数据源和目标数据是LINQ查询的必备元素,筛选条件和附加操作是可选元素。

  再比如上一篇《1.2 如何使用LINQ》示例代码,就是一个只包含了from和select最基础的LINQ查询。

内容参考:

《精通C#5.0与.NET 4.5高级编程——LINQ、WCF、WPF和WF》

【来自 孤影'Blog:http://www.cnblogs.com/LonelyShadow,码字不容易,转载请注明出处。】

1.3 LINQ查询的更多相关文章

  1. Entity Framework 6 Recipes 2nd Edition(13-6)译 -> 自动编译的LINQ查询

    问题 你想为多次用到的查询提高性能,而且你不想添加额外的编码或配置. 解决方案 假设你有如Figure 13-8 所示的模型 Figure 13-8. A model with an Associat ...

  2. LinqToDB 源码分析——轻谈Linq查询

    LinqToDB框架最大的优势应该是实现了对Linq的支持.如果少了这一个功能相信他在使用上的快感会少了一个层次.本来笔者想要直接讲解LinqToDB框架是如何实现对Linq的支持.写到一半的时候却发 ...

  3. Linq查询基本操作

    摘要:本文介绍Linq查询基本操作(查询关键字) - from 子句 - where 子句 - select子句 - group 子句 - into 子句 - orderby 子句 - join 子句 ...

  4. C#基础:LINQ 查询函数整理

    1.LINQ 函数   1.1.查询结果过滤 :where() Enumerable.Where() 是LINQ 中使用最多的函数,大多数都要针对集合对象进行过滤,因此Where()在LINQ 的操作 ...

  5. 《Entity Framework 6 Recipes》中文翻译系列 (26) ------ 第五章 加载实体和导航属性之延缓加载关联实体和在别的LINQ查询操作中使用Include()方法

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-7  在别的LINQ查询操作中使用Include()方法 问题 你有一个LINQ ...

  6. Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)

    为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了.但是只支持了一些简单的.常用的条件查询,支持的力度很有限.特别是遇到对聚合对象的查询时,就不能再使用 ...

  7. c# Linq查询

    c#提供的ling查询极大的遍历了集合的查询过程,且使用简单方便,非常的有用. 下面将分别用简单的例子说明:ling基本查询.延迟查询属性.类型筛选.复合from字句.多级排序.分组查询.联合查询.合 ...

  8. Linq查询表达式

    目录 1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. ...

  9. .NET LINQ查询操作中的类型关系

    LINQ 查询操作中的类型关系      若要有效编写查询,您应该了解完整的查询操作中的变量类型是如何全部彼此关联的. 如果您了解这些关系,就能够更容易地理解文档中的 LINQ 示例和代码示例. 另外 ...

  10. .NET LINQ查询语法与方法语法

    LINQ 查询语法与方法语法      通过使用 C# 3.0 中引入的声明性查询语法,介绍性 LINQ 文档中的多数查询都被编写为查询表达式. 但是,.NET 公共语言运行时 (CLR) 本身并不具 ...

随机推荐

  1. Hsql中In没有1000的限制

    SELECT * FROM user , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ...

  2. android可扩展自己的定义,运动图像裁剪框

    在实际项目中,常常要制作一个简易的图像裁剪功能,即获取一张图片.并用一个遮罩层选择目标范围并截取保存的功能.例如以下图所看到的: 在此分享下该自己定义视图的制作过程. 需求说明 整一个视图包括一个透明 ...

  3. cocos2dx tolua传递参数分析

    cocos2dx tolua传递参数分析: tolua_Cocos2d_CCNode_addChild00 == void CCNode::addChild(CCNode *child) tolua_ ...

  4. linux虚拟机网络配制方法及遇到问题的解决方法

    linux虚拟机网络问题 刚安装一个vmware虚拟机.并在上面安装了一个redhat linux操作系统. 安装完后配制了下网络. 首先观察windows上的网络配制. ip:192.168.1.1 ...

  5. php用魔术方法__call实现类函数重载

    因为php是弱类型语言,不喜欢c++通过改变函数返回相同的值键入的参数的数目和功能将过载!但在需求函数的实际发展可能过载.开发需求,我们能够通过魔术方法__call()来实现函数重载. class T ...

  6. Eclipse—怎样为Eclipse开发工具中创建的JavaWebproject创建Servlet

    在博客<在Eclipse中怎样创建JavaWebproject>中图文并茂的说明了Eclipse中创建JavaWebproject的方法,本篇博客将告诉大家怎样为Eclipse开发工具中创 ...

  7. ActionBarActivity: cannot be resolved to a type

    "the import android.support.v7 cannot be resolved  " or "ActionBarActivity: cannot be ...

  8. django 简易博客开发 1 安装、创建、配置、admin使用(转)

    Django 自称是“最适合开发有限期的完美WEB框架”.本文参考<Django web开发指南>,快速搭建一个blog 出来,在中间涉及诸多知识点,这里不会详细说明,如果你是第一次接触D ...

  9. 从头到尾彻底理解KMP(转)

    引言 KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得非常混乱,如此,留言也是骂声一片.所以一直想找机会重新写下KMP,但苦于一直以来对KMP的理解始终不够,故 ...

  10. neu1458 方格取数 dp解法

    题意: 有N * N个格子,每一个格子里有正数或者0,从最左上角往最右下角走,仅仅能向下和向右,一共走两次(即从左上角走到右下角走两趟),把全部经过的格子的数加起来,求最大值SUM,且两次假设经过同一 ...