【C#】解析C#中LING的使用
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();
原文链接:
【C#】解析C#中LING的使用的更多相关文章
- 浅解析js中的对象
浅解析js中的对象 原文网址:http://www.cnblogs.com/foodoir/p/5971686.html,转载请注明出处. 前面的话: 说到对象,我首先想到的是每到过年过节见长辈的时候 ...
- 深入解析Javascript中this关键字的使用
深入解析Javascript中面向对象编程中的this关键字 在Javascript中this关键字代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如: function TestFun ...
- js中eval详解,用Js的eval解析JSON中的注意点
先来说eval的用法,内容比较简单,熟悉的可以跳过eval函数接收一个参数s,如果s不是字符串,则直接返回s.否则执行s语句.如果s语句执行结果是一个值,则返回此值,否则返回undefined. 需要 ...
- 2dx解析cocosbuilder中使用layer时的缺陷
2dx解析cocosbuilder中使用layer时的缺陷 cocos2d-x 3.7 cocosbuilder中的layer通常会用到触摸属性: 但是在2dx解析布局文件的时候,却很多属性都没解析: ...
- asp自动解析网页中的图片地址,并将其保存到本地服务器
程序实现功能:自动将远程页面的文件中的图片下载到本地. 程序代码 <% '将本文保存为 save2local.asp '测试:save2local.asp?url=http://ent.sina ...
- XML解析——Java中XML的四种解析方式
XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已. XML的解析方式分为四 ...
- 转:二十一、详细解析Java中抽象类和接口的区别
转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...
- [转载]解析WINDOWS中的DLL文件---经典DLL解读
[转载]解析WINDOWS中的DLL文件---经典DLL解读 在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库.现在就走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! ...
- 深度解析javascript中的浅复制和深复制
原文:深度解析javascript中的浅复制和深复制 在谈javascript的浅复制和深复制之前,我们有必要在来讨论下js的数据类型.我们都知道有Number,Boolean,String,Null ...
随机推荐
- 【JavaScript】对象
No1: typeof操作符获取对象的类型 null的类型是object,Array的类型也是object,如果我们用typeof将无法区分出null.Array和通常意义上的object——{}. ...
- Alpha(7/10)
鐵鍋燉腯鱻 项目:小鱼记账 团队成员 项目燃尽图 冲刺情况描述 站立式会议照片 各成员情况 团队成员 学号 姓名 git地址 博客地址 031602240 许郁杨 (组长) https://githu ...
- CodeForces round 967 div2 题解(A~E)
本来准备比完赛就写题解的, 但是一拖拖了一星期, 唉 最后一题没搞懂怎么做,恳请大神指教 欢迎大家在评论区提问. A Mind the Gap 稳定版题面 https://cn.vjudge.net/ ...
- php 压缩文件 zip
<?php class PHPZip { private $ctrl_dir = array(); private $datasec = ...
- 潭州课堂25班:Ph201805201 django 项目 第十五课 用户注册功能后台实现 (课堂笔记)
前台:判断用户输入 ,确认密码,手机号, 一切通过后向后台发送请求, 请求方式:post 在 suers 应用下的视图中: 1,创建个类, 2,创建 GET 方法,宣言页面 3,创建 POST 方法 ...
- STM32(HY-SRF05)超声波测距项目
参考资料: https://www.cnblogs.com/qsyll0916/p/6964638.html http://blog.csdn.net/zhangdaxia2/article/deta ...
- HDU5293 : Tree chain problem
问题即:选择价值和最多的链,使得每个点最多被一条链覆盖. 那么考虑其对偶问题:选择最少的点(每个点可以重复选),使得每条链上选了至少$w_i$个点. 那么将链按照LCA的深度从大到小排序,每次若发现点 ...
- Urozero Autumn 2016. UKIEPC 2016
B. Build a Boat 首先求出每块船舱的面积$S$,然后进行$m$次二分,得到每个切割线的位置. 为了计算某个切割线形成的区域的面积,需要将多边形整理成上边界和下边界,分别二分出断点位置,中 ...
- redis(六)
安装包 到中文官网查找客户端代码 联网安装 sudo pip install redis 使用源码安装 unzip redis-py-master.zip cd redis-py-master sud ...
- redis(二)
基本配置 在源文件/usr/local/redis目录下,文件redis.conf为配置文件 绑定地址:如果需要远程访问,可将此行注释 bind 127.0.0.1 端口,默认为6379 port 6 ...