【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 ...
随机推荐
- HDU-2032解题报告
Hdu-2032解题报告题意:实现给定行数的杨辉三角的输出. 杨辉三角的特点:每一行数据的开头和结尾是1,然后其他的数据是由其上一个数据与其左上角的数据之和组成11 11 2 11 3 3 11 4 ...
- C++学习之 —— 输入输出
案例:输入任意空格和数字,输出其中的数字之和. #include <iostream> using namespace std; int main() { ; cout << ...
- [ 严重 ] my网SQL注入
RANK 80 金币 100 数据包 POST maoyan.com/sendapp HTTP/1.1Host: xxx.maoyan.comUser-Agent: Mozilla/5.0 ( ...
- 002.MongoDB社区版安装
一 前期准备 1.1 相关软件包介绍 包裹名字 描述 mongodb-org 一个将自动安装以下四个组件包的组合包. mongodb-org-server 包含mongod守护程序,关联的init脚本 ...
- [Python]list.append字典的时候,修改字典会导致list内容变化的问题
今天写了这样的一段代码,出现了BUG. log_message["EventName"] = "上架->可用" log_message["Eve ...
- Some Conclusions.
目录 DP 四边形不等式 数论 & 数学 数据结构 树链剖分 左偏树的性质及\(O(n)\)的构造 图论 树 二分图 竞赛图 平面图 双连通分量 字符串 后缀自动机 复杂度分析 没什么好写的. ...
- python基础一 ------如何获取多个字典相同的键
需求: 足球赛第一场进去统计 {"A":3,"B":2,"C":1}足球赛第二场进去统计 {"A":3," ...
- CSS设置文字不能被选中
/*设置文字不能被选中 以下为css样式*/ -webkit-user-select:none; -moz-user-select:none; -ms-user-select:none; us ...
- [Codeforces113C]Double Happiness(数论)
题意 给定闭区间[l,r] [l,r] [l,r],找出区间内满足t=a2+b2 t=a^{2}+b^{2} t=a2+b2的所有素数t t t的个数( a,b a,b a,b为任意正整数). 思路 ...
- C++学习笔记53:泛型程序设计与C++标准模板库
泛型程序设计的基本概念 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的 C++模板为泛型编程程序设计奠定了关键的基础 模型:符合一个概念的数据类型称为该概念的模型,例如: ...