语言集成查询(LINQ)是 Visual Studio2008中引入的一组功能。

可为
C# 和 Visual Basic 语言语法提供强大的查询功能。

LINQ引入了标准易学的数据查询和更新模式,能够扩展该方法来支持不论什么类型的数据存储。 Visual Studio 包含 LINQ 提供程序集,后者支持将 LINQ 与.NET Framework 集合、SQL Server 数据库、ADO.NET 数据集和 XML 文档结合使用。

在LINQ查询中。能够使用同样的基本编码模式来查询和转换xml文档,sql数据库,ADO.NET数据集以及其它格式的数据。总的说是下面三部分

  • LINQ to Objects 主要负责对象的查询
  • LINQ to XML 主要负责 XML 的查询
  • LINQ to ADO.NET 主要负责数据库的查询
    • LINQ to SQL

整体架构图

看完了主要的架构图我们就来看看LINQ给我们提供的查询操作吧。

LINQ的查询分为三个部分


  • 获取数据源
  • 创建查询
  • 运行查询

以下我们就来做个初体验。在没有linq前,我们这样查询

从number数组中提权耦并降序排列

int[] numbers = newint[] { 6, 4, 3, 2, 9, 1, 7, 8, 5 };

List<int> even= new List<int>();

foreach (int numberin numbers)
{
if (number % 2 == 0)
{
even.Add(number);
}
} even.Sort();
even.Reverse();

有了linq我们这样查询

int[] numbers = newint[] { 6, 4, 3, 2, 9, 1, 7, 8, 5 };

var even = numbers
.Where(p => p % 2 == 0)
.Select(p => p)
.OrderByDescending(p => p);

以上的查询使用了Lamdba的方法。

以下我们演示怎样使用源码查询的三个部分

class IntroToLINQ
{
static void Main()
{
// LINQ的构成,三部分:
// 1. Data source.
int[] numbers = new int[7] { 0, 1, 2,3, 4, 5, 6 }; // 2. 创建查询
// numQuery is anIEnumerable<int>
var numQuery =
from num in numbers
where (num % 2) == 0
select num; // 3. 运行查询.
foreach (int num in numQuery)
{
Console.Write("{0,1} ",num);
}
}
}

注意: select中的 
num为查询变量

在 LINQ中,查询的运行与查询本身截然不同;换句话说,假设仅仅是创建查询变量,则不会检索不论什么数据。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFuX3lhbmt1bjIwMDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

查询


上一个实例中查询从整数数组中返回全部偶数。

该查询表达式包括三个字句。from。where,select(这些字句的顺序与SQL中的顺序相反).from指定查询的数据源。where字句应用筛选器。select字句制定返回的元素类型。LINQ
中,查询变量本身不运行不论什么操作而且不返回不论什么数据。 它仅仅是存储在以后某个时刻运行查询时为生成结果而必需的信息

查询运行


延迟运行

如前所述,查询变量本身仅仅是存储查询命令。 实际的查询运行会延迟到在 foreach语句中循环訪问查询变量时发生。 此概念称为“延迟运行”。以下的演示样例对此进行了演示:

//  Query execution.
foreach (int num innumQuery)
{
Console.Write("{0,1} ", num);
}

该运行方法才会调用上面的查询方法。而且有多少个数据运行多少次的查询操作。

迭代变量 num 保存了返回的序列中的每一个值(一次保存一个值)。

小结:

以上是对LINQ的开篇介绍。LINQ查询表达式的基本构成,当中涉及到了延迟载入。

说道这个延迟载入,整的非常神奇一样。看透了也仅仅是一个执行时的方法调用。兴许介绍linq的对象查询

每一个对象查询中都少不了托付泛型。以及匿名函数lamdba的写法。所以他们是相辅相成的。

LinQ开篇介绍的更多相关文章

  1. ABP理论学习之开篇介绍

    返回总目录 为了和2016年春节赛跑,完成该系列博客,我牺牲了今天中午的时间来完成该系列的第一篇----开篇介绍.开篇介绍嘛,读过大学教材的同学都知道,这玩意总是那么无聊,跟考试没关系,干脆直接跳过, ...

  2. React与ES6(一)开篇介绍

    React与ES6系列: React与ES6(一)开篇介绍 React和ES6(二)ES6的类和ES7的property initializer React与ES6(三)ES6类和方法绑定 React ...

  3. “Zhuang.Data”轻型数据库访问框架(一)开篇介绍

    目录: “Zhuang.Data”轻型数据库访问框架(一)开篇介绍 “Zhuang.Data”轻型数据库访问框架(二)框架的入口DbAccessor对象 框架介绍 该框架主要用于数据库访问,封装了包括 ...

  4. 一、Go语言开篇介绍

    Go语言开篇介绍 Go语言 是Google公司 在2007开发一种静态强类型.编译型语言,并在 2009 年正式对外发布. Go语言以其近C的执行性能和近解析型语言的开发效率,以及近乎于完美的编译速度 ...

  5. .NET Core IdentityServer4实战-开篇介绍与规划

    一.开篇寄语 由于假期的无聊,我决定了一个非常有挑战性的活动,也就是在年假给大家带来一个基于OAuth 2.0的身份授权框架,它就是 IdentityServer4 ,如果没有意外的话,一定可以顺利的 ...

  6. C# 基础知识系列- 6 Lambda表达式和Linq简单介绍

    前言 C#的lambda和Linq可以说是一大亮点,C#的Lambda无处不在,Linq在数据查询上也有着举足轻重的地位. 那么什么是Linq呢,Linq是 Language Intergrated ...

  7. 【开源分享:入门到精通ASP.NET MVC+EF6+Bootstrap】从这里开始,一起搭框架(1)开篇介绍

    框架简介 这几年一直在做ASP.NET开发,几年前做项目都是老老实实一行行的写代码,后来发现那些高手基本都会有自己积累起来的代码库,现在称之为开发框架,基础代码不用再去堆,主要精力可以集中在业务逻辑实 ...

  8. 第一篇、vlc-android之开篇介绍

    转载请注明出处:http://blog.csdn.net/cuiran/article/details/30054835 最近一直研究android的视频直播部分,从最开始的直接播放本地视频文件,到使 ...

  9. Ejb in action(一)——开篇介绍

    从今天開始.我们共同来学习JavaEE中一个很重要的规范:Ejb. 既然您已经找到了这篇文章.就说明您至少已经对分布式开发有个大体上的概念了,之前没了解过也没关系,正好通过咱们的共同学习,一起来了解它 ...

随机推荐

  1. AIX 10G HA RAC卸载

    删除 1:crs_stat –t资源都停掉 2:停ha 3: 删除oracle 4:删除crs 5: 删除ha smit hacmp 6: 删除vg exportvg 7;卸载hacmp smitty

  2. (转)SpringMVC学习(十一)——SpringMVC实现Resultful服务

    http://blog.csdn.net/yerenyuan_pku/article/details/72514034 Restful就是一个资源定位及资源操作的风格,不是标准也不是协议,只是一种风格 ...

  3. freenas iscsi initiator 配置

    1.加载Iscsi Initiator 模块 freebsd从7.0开始已经包含了Iscsi Initiator ,不需要安装后再使用,但在使用前,需要加载模块. # kldload -v iscsi ...

  4. CSU——2161: 漫漫上学路 最短路

    Description 众所周知,CSU(California State)University) 的上课地点距离学生公寓很远,对于爱睡懒觉的小Z来说,每天去上课就成了一件非常头疼的事,如果有早课的话 ...

  5. 零基础入门学习Python(11)--列表:一个打了激素的数组(2)

    前言 上节课我们介绍一个打了激素的数组,叫做列表.列表我们比作一个大仓库,你所能够具现化的东西,都可以往里面扔,它包罗万象.另外还介绍了三个往列表添加元素的方法,分别是: append(),exten ...

  6. PHP:车牌照合法性

    文章来源:http://www.cnblogs.com/hello-tl/p/7592362.html <?php /** * [verifyCarCard description] 效验车牌号 ...

  7. django 使用框架下auth.models自带的User进行扩展增加字段

    需要改动三个地方: 1.models.py   创建模型User,并继承原模型类AbstraUser(在此处我增加了一个新的字段手机号) from django.db import models # ...

  8. js 列表几种循环的比较

    数组 遍历 普通遍历 最简单的一种,也是使用频率最高的一种. let arr = ['a', 'b', 'c', 'd', 'e'] for (let i = 0; i < arr.length ...

  9. Jmeter关联,正则表达式提取器使用2

    正则表达式的用处很多,最基础的用法 1,断言 2,传参(关联) 例子 1.http请求 2正则表达式提取,想要提取列表列中id,一遍打开列表页 如果是1,每次就会取相同的值!匹配数字的权限高于模板$0 ...

  10. Python接口测试之unittest框架(五)

    Test-driven development(TDD)开发模式在今天已经不是什么新奇的事了,它的开发思维是在开发一个产品功能的时候,先 编写好该功能的测试代码,在编写开发比如,比如要写二个数相除的函 ...