LING提供了一种从数据源中获取数据的方式,不同的语言已经形成了很多种关联的数据源。LING(Language Integrated Query,语言集成查询)提供一种通用的从不同的数据源中获取数据的通用方式。

LING操作的三个基本要素

所有的LING语句都由三部分组成,它们分别是获取数据源、创建查询语句、执行查询语句。

下面是一个简单的案例:

class IntroToLINQ
{
static void Main()
{
// The Three Parts of a LINQ Query:
// 1. Data source.
int[] numbers = new int[] { , , , , , , }; // 2. Query creation.
// numQuery is an IEnumerable<int>
var numQuery =
from num in numbers
where (num % ) ==
select num; // 3. Query execution.
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}
}
}

下面的图验证了完整的执行操作,在LING的查询和平常的查询概念不同。LING中创建查询变量是不会获取任何实际的数据,这一点在后面会详细介绍。

获取数据源

LING语句的数据源必须是 IEnumerable或IEnumerable<E>接口的实现类,上面的int[]数组隐式实现了IEnumerable<E>接口,所以可以使用LING语句。
除了可以LING指定已经加载内存中的数据源,也可以为LING指定还未加载到内存中的数据源,下面使用LING to XML加载一个XML文档到内存中:

// Create a data source from an XML document.
// using System.Xml.Linq;
XElement contacts = XElement.Load(@"c:\myContactList.xml");

或者使用LING to db 加载一个数据库文件到内存中:

Northwnd db = new Northwnd(@"c:\northwnd.mdf");

// Query for customers in London.
IQueryable<Customer> custQuery =
from cust in db.Customers
where cust.City == "London"
select cust;

创建查询语句

查询语句指定了从数据源获取数据源的方式,一般情况下也应该指定数据的排序方式,分组方式或是结构化处理。

上面的查询操作是从一个Int数据中返回数据,其查询语句一共使用了三个从句:from,where,select。from从句指定查询的数据源,where从句使用过滤语句,select从句指定返回语句。

注意:查询变量本身不产生任何实际的查询操作也不会返回任何数据,它仅仅是存储查询的语句。可以通过在代码调试来验证这一点。

执行查询操作

延迟执行

在上面的案例中,查询变量仅仅是存储查询的命令,实际的查询操作是对这个查询变量进行迭代操作。这就是LING的延迟执行。上面的案例中,实际的查询操作是:

        foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}

这里foreach就是获取查询结果的地方,其中num就代表从查询结果中获取到值。

因为查询变量不会存储任何任何查询结果,所以可以多次执行这个查询变量。比如,有一个数据库可能被不同的应用连续进行更新操作。或者,在一个应用程序中先创建查询语句然后晚些再执行它。或者,可以在间隔时间内执行相同的查询语句获得不同的查询结果。

立即执行

LING对查询提供了聚集函数的功能,使用这些功能时首先必须循环访问这些元素。这些聚集函数有:Count,Max,Average和First。因为查询本身使用foreach返回查询结果,因此这些函数都不需要显式foreach语句。使用这些函数查询返回的是单个值,不是一个IEnumerable集合。

var evenNumQuery =
from num in numbers
where (num % ) ==
select num; int evenNumCount = evenNumQuery.Count();

若要强制执行并返回缓存查询的结果,可以调用ToList和ToArray方法。

List<int> numQuery2 =
(from num in numbers
where (num % ) ==
select num).ToList(); // or like this:
// numQuery3 is still an int[] var numQuery3 =
(from num in numbers
where (num % ) ==
select num).ToArray();

原文链接:

LING查询简介

C#LING入门

【C#】解析C#中LING的使用的更多相关文章

  1. 浅解析js中的对象

    浅解析js中的对象 原文网址:http://www.cnblogs.com/foodoir/p/5971686.html,转载请注明出处. 前面的话: 说到对象,我首先想到的是每到过年过节见长辈的时候 ...

  2. 深入解析Javascript中this关键字的使用

    深入解析Javascript中面向对象编程中的this关键字 在Javascript中this关键字代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如: function TestFun ...

  3. js中eval详解,用Js的eval解析JSON中的注意点

    先来说eval的用法,内容比较简单,熟悉的可以跳过eval函数接收一个参数s,如果s不是字符串,则直接返回s.否则执行s语句.如果s语句执行结果是一个值,则返回此值,否则返回undefined. 需要 ...

  4. 2dx解析cocosbuilder中使用layer时的缺陷

    2dx解析cocosbuilder中使用layer时的缺陷 cocos2d-x 3.7 cocosbuilder中的layer通常会用到触摸属性: 但是在2dx解析布局文件的时候,却很多属性都没解析: ...

  5. asp自动解析网页中的图片地址,并将其保存到本地服务器

    程序实现功能:自动将远程页面的文件中的图片下载到本地. 程序代码 <% '将本文保存为 save2local.asp '测试:save2local.asp?url=http://ent.sina ...

  6. XML解析——Java中XML的四种解析方式

    XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已. XML的解析方式分为四 ...

  7. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

  8. [转载]解析WINDOWS中的DLL文件---经典DLL解读

    [转载]解析WINDOWS中的DLL文件---经典DLL解读 在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库.现在就走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! ...

  9. 深度解析javascript中的浅复制和深复制

    原文:深度解析javascript中的浅复制和深复制 在谈javascript的浅复制和深复制之前,我们有必要在来讨论下js的数据类型.我们都知道有Number,Boolean,String,Null ...

随机推荐

  1. PostgreSQL 调用存储过程返回结果集

    创建返回结果集类型的存储过程: CREATE OR REPLACE FUNCTION public.f_get_member_info( id integer, productname charact ...

  2. Java内存管理-掌握类加载器的核心源码和设计模式(六)

    勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 上一篇文章介绍了类加载器分类以及类加载器的双亲委派模型,让我们能够从整体上对类加载器有 ...

  3. 简单总结下opacity、transparent以及rgba

    这几个概念最开始学的时候只是有个大致印象,现在复习这部分的知识点,发现不仔细区分一下,还真有点混乱. 三者共同点是都和透明有关.先分着来说一下: 1.opacity用来设置元素的不透明级别,从 0.0 ...

  4. Web API之service worker

    一.参考链接 https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API http://www.alloyteam.com/ ...

  5. C# 使用PrintDocument 绘制表格 完成 打印预览

    C# 使用PrintDocument 绘制表格 完成 打印预览 DataTable   经过不断的Google与baidu,最终整理出来的打印类 主要是根据两个参考的类组合而成,稍微修改了一下,参考代 ...

  6. Linux——目录结构思维导图

  7. 潭州课堂25班:Ph201805201 tornado 项目 第二课 项目 基本功能模块和 Git 使用 (课堂笔记)

    tornado 相关说明 把图片显示在页面, 创建个 static 文件夹, 在这个文件下存放几张图片 在配置中指定静态文件路径, 在 html 文件中迭代出图片, 创建个包,重构 handlers ...

  8. vue中,class与style绑定

    <template> <div> <p v-bind:class="{active:isActive,'demo':Demo}">嘿嘿</ ...

  9. C++学习笔记54:关联容器,函数对象

    关联容器的特点 1.每个关联容器都有一个键(key) 2.可以根据键高效查找元素 集合set 集合用来存储一组无重复的元素,由于集合的元素本身是有序的,可以高效地查找元素,也可以方便地指定大小范围的元 ...

  10. 3ds max学习笔记(八)-- 实例操作(直行楼梯)

    1.选择要复制的物体,执行[工具]/[阵列]命令,弹出对话框: 2.参数说明: 应用: 1.[自定义]/[单位设置],将单位改为mm 在顶视图中,创建长方体,长1600,宽300,高度150 2.在前 ...