博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LINQ高级编程 笔记
阅读量:5913 次
发布时间:2019-06-19

本文共 3874 字,大约阅读时间需要 12 分钟。

相关资料:http://www.cnblogs.com/lifepoem/archive/2011/12/16/2288017.html

 

1.什么是LINQ

语言集成查询是一系列标准查询操作符的集合,这些操作符几乎对每一种数据源的导航、过滤和执行操作都提供了底层的基本查询架构。Linq  可查询的数据源包括XML(可使用LINQ to XML)、关系数据(使用LINQ to SQL)、ADO.NET DataSets(使用 LINQ to DataSet)以及内存中的数据。

2.LINQ的优势

a)一个可用于任何.NET编程语言的查询操作符集合,可以使用同一种语法为数据库、XML、或者内存中的数据编写查询,同时还得到了附加的好处,即IntelliSense和编译时类型检查;

3.LINQ 在查询目录上的运用例子

1  DirectoryInfo di = new DirectoryInfo("C:\\");2             var dirName = from dir in di.GetDirectories()3                            orderby dir.Name descending 4                            select new { dir.Name };5             ViewBag.fileList = dirName.ToList();

4.LINQ在查询系统中所有进程上的运用的例子

1  //linq在系统进程查询上的运用2             var procQuery = from p in Process.GetProcesses()3                             orderby p.WorkingSet64 descending4                             select new { p.ProcessName, p.Id, p.WorkingSet64 };5             ViewBag.procList = procQuery.ToList();

 5.into关键字

在我们前面查询表达式的例子中,select关键字的出现也就意味着查询的结束了。而into关键字让我们在结果投影之后还可以继续我们的查询,它是对分步构建查询表达式的一种简写方式。现在我们可以使用into关键字来重写上例中的查询:

IEnumerable
query = from n in names select n.Replace("a", "").Replace("e", "").Replace("i", "") .Replace("o", "").Replace("u", "") into noVowel where noVowel.Length > 2 orderby noVowel select noVowel; // Result: Dck, Hrry, Mry

我们只能在select和group子句后面使用into关键字,它会重新开始一个查询,让我们可以继续引入where, orderby和select子句。尽管表面上看,我们重新创建了一个新的查询,但当上面的查询被翻译成方法语法时,它只是一个查询,一个链接了多个运算符的查询,所以上面的写法不会造成性能问题。

6.

渐进式查询创建方式可以通过在一个查询中嵌入另一个查询来改写,这样可以把多个查询组合成单个查询,即:

var tempQuery = tempQueryExpr

var finalQuery = from … in (tempQuery)

可以改写为:

var query = from … in (tempQueryExpr)

上面两种方式以及into关键字的工作方式是一样的,编译器都会把他们翻译成一个链接查询运算符。请看下面的示例:

string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" };             // 渐进式查询(Progressive query building)            IEnumerable
query = from n in names select Regex.Replace(n, "[aeiou]", ""); query = from n in query where n.Length > 2 orderby n select n; // 用包装查询方式进行改写(Wrapping Queries) IEnumerable
query2 = from n1 in ( from n2 in names select Regex.Replace(n2, "[aeiou]", "") ) where n1.Length > 2 orderby n1 select n1; // 与上面等价的方法语法 IEnumerable
query3 = names .Select(n => Regex.Replace(n, "[aeiou]", "")) .Where(n => n.Length > 2) .OrderBy(n => n);

7.匿名类型上面我们自己定义了类型TempProjectionItem来存放查询的结果。通过使用匿名类型,我们可以省去这种中间类型的定义,而由编译器来帮我们完成:

var intermediate = from n in names                               select new                               {                                   Original = n,                                   Vowelless = Regex.Replace(n, "[aeiou]", "")                               };            IEnumerable
query = from item in intermediate where item.Vowelless.Length > 2 select item.Original;

需要注意的是,因为匿名类型的确切类型名是由编译器自动产生的,因此intermediate的类型为:IEnumerable <random-compiler-produced-name> 。我们来声明这种类型的唯一方式就是使用var关键字,这时,var不只是更加简洁,而且也是必需的手段。

8.let关键字let关键字让我们可以在保持范围变量的同时引入新的查询变量。比如上面的示例,我们可以用let关键字作如下改写:

string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" };            var query = from n in names                        let Vowelless = Regex.Replace(n, "[aeiou]", "")                        where Vowelless.Length > 2                        select n;   //正是因为使用了let,此时n仍然可见

let关键字非常灵活和方便,就像例子看到的那样。而且,我们可以使用多个let关键字,并且后面的 let表达式可以引用前一个let关键字引入的变量。

转载于:https://www.cnblogs.com/meiCode/p/5192362.html

你可能感兴趣的文章
nginx实时记录请求状态信息( ngx_realtime_request_module)
查看>>
Docker Registry服务器部署配置
查看>>
scala可变长度参数(二)
查看>>
postgreSQl导数据
查看>>
老李分享:qtp自动化测试框架赏析-关键字自动化测试框架 2
查看>>
忙里偷闲 -- 工作随笔
查看>>
PowerManager Android 电源管理
查看>>
自定义PlantUML和C4Model的样式
查看>>
线程的等待和唤醒
查看>>
jQuery页面滚动图片等元素动态加载实现
查看>>
记一次内存爆涨分析 , JVM命令使用
查看>>
jQuery的性能优化,你知道几条
查看>>
设计模式之单例模式
查看>>
c++初级(本人scdn)
查看>>
mahout的数据文件格式
查看>>
<MySQL>数据库备份和恢复
查看>>
通过数据自动生成流程图(前端方向)
查看>>
国家气象局免费天气预报接口,城市代码(JSON格式)
查看>>
DataGrid内容的导出
查看>>
当然我在扯淡
查看>>