对于Linq查询有几个要点,数据源,元素,投影。把握这几个要点,那么运用起来得心应手。

(一)查找句子

这里指的句是是英文句子,英文句子以.!?结束(逗点,叹号,问号)。下面摘取《The Call of the Wild》一段来进行介绍。

先来一大段:

string str=@"There he lay for the remainder of the weary night, nursing his wrath"+

@"and wounded pride. He could not understand what it all meant. What"+

@"did they want with him, these strange men? Why were they keeping"+

@"him pent up in this narrow crate? He did not know why, but he felt"+

@"oppressed by the vague sense of impending calamity. Several times"+

@"during the night he sprang to his feet when the shed door rattled open,"+

@"expecting to see the Judge, or the boys at least. But each time it was"+

@"the bulging face of the saloon-keeper that peered in at him by the sickly"+

@"light of a tallow candle. And each time the joyful bark that trembled in"+

@"Buck's throat was twisted into a savage growl.";

然后,查找带有“Buck”的句子,并分别打印出来。

首先,这里的数据源就是这个字符串(或者说这个段落),然后元素就是想要的每个句子,投影也是句子,就是要段落中的所有句子。

获取数据源:数据源应该是句子集合,对于字符串来说,直接的进行Linq查询,那么它的元素将是一个一个的字符,所以这里要得到数据源:

string[] sentences=str.Split(new char[]{'.','?','!'});

用来分隔句子。现在的结果是:

There he lay for the remainder of the weary night, nursing his wrathand wounded pride
 
 He could not understand what it all meant
 
 Whatdid they want with him, these strange men
 
 Why were they keepinghim pent up in this narrow crate
 
 He did not know why, but he feltoppressed by the vague sense of impending calamity
 
 Several timesduring the night he sprang to his feet when the shed door rattled open,
expecting to see the Judge, or the boys at least
 
 But each time it wasthe bulging face of the saloon-keeper that peered in at
him by the sicklylight of a tallow candle
 
 And each time the joyful bark that trembled inBuck's throat was twisted into a savage growl

然后,对于含有“Buck”的句子就是其中的元素,它的类型是字符串;而所需要就是这些句子。

var q1=from p in sentences
        where p.Contains("Buck")
        select p;

And each time the joyful bark that trembled inBuck's throat was twisted into a savage growl

上边查出的句子前边有空格,现在去除空格,这里用正则表达式来完成。

这个相对比较简单:

var q1=from p in sentences
        where p.Contains("Buck")
        select Regex.Replace(p,@"^\ ","");

And each time the joyful bark that trembled inBuck's throat was twisted

into a savage growl

(二)遍历文件

遍历目录下的所有文件并打印:

DirectoryInfo path = new DirectoryInfo(@"L:\css");
FileInfo[] fileinfos = path.GetFiles();

var q = from p in fileinfos
         elect new { 文件名 = p.Name, 文件大小 = p.Length / 1024 };
q.Dump();

我现在打印的是目录下的文件:

文件名
 文件大小
 
1.jpg
 247
 
float.htm
 0
 
……
 ……
 
链接.htm
 0

上边只是遍历了目录下的文件,而对于其中的文件夹中的文件没能查询到,下边实现遍历全路径,方法很简单:

DirectoryInfo path = new DirectoryInfo(@"L:\css");
FileInfo[] fileinfos = path.GetFiles("*", SearchOption.AllDirectories);

var q = from p in fileinfos
         select new
       { 文件名 = p.Name, 文件大小 = p.Length / 1024, 文件路径 = p.FullName };

q.Dump();

文件名
 文件大小
 文件路径
 
1.jpg
 247
 L:\css\1.jpg
 
float.htm
 0
 L:\css\float.htm
 
……
 ……
 ……
 
qq.gif
 25
 L:\css\pic\qq.gif
 
t.png
 15
 L:\css\pic\t.png

找到数据源,明确其中的元素单位,并按所需进行投影设置。

(三)查找最大的文件

按文件大小排序,并通过元素选择来得到文件

DirectoryInfo path = new DirectoryInfo(@"L:\css");
FileInfo[] fileinfos = path.GetFiles("*", SearchOption.AllDirectories);

var q = (from p in fileinfos
          orderby p.Length
          select p).Last();
Console.Write(q.FullName);

(四)在文本文件中查找字符串

查找带有指定字符串的文件

var q = from p in fileinfos
         where p.Extension == ".htm"
         select p.FullName;

先指定筛选条件文件文件,扩展名为htm的文件,然后投影选择文件全名。然后在投影之前添加对文本文件中的字符串的查找:

DirectoryInfo path = new DirectoryInfo(@"L:\css");
FileInfo[] files = path.GetFiles("*", SearchOption.AllDirectories);

var q = from p in files
        where p.Extension == ".htm"
        && GetFileContent(p.FullName).Contains("导航")
        select p;

foreach (var info in q)
    Console.WriteLine(info.FullName);

GetFileContent方法是通过路径读取文本文件内容。

结果略。

这里提一下let关键字。Let类似mssql中的declare,用于声明局部变量

var q = from p in files
         where p.Extension == ".htm"
         let strContent= GetFileContent(p.FullName)
         where strContent.Contains("导航")
         select p;

这里设置strContent变量,然后再通过另一个where来与上过滤条件。Let非常有用。

LinqToObject(2)——自由自在相关推荐

  1. Android逆向进阶——让你自由自在脱壳的热身运动(dex篇)

    本文作者:HAI_ 0×00 前言 来看看我们今天的主题. 让你自由自在脱壳的热身运动. 现在很多第厂家都是使用第三方的加固方式来进行加固的.或者使用自己的加固方式进行加固. 那么我们必不可少的就是脱 ...

  2. 自由自在意式手工冰淇淋,健康时尚的美味零食

    冰淇淋发展到今天,虽然不是日常饮食的必需品,但却成为了正餐以外一道备受欢迎的休闲零食.而且随着技术的进步和消费需求的增加,冰淇淋也由传统的夏季解渴冰品发展成一年四季都火爆非常的休闲美食,而且在品种和营 ...

  3. 自由自在意式手工冰淇淋 果香浪漫的甜蜜

    自由自在意式手工冰淇淋秉承"做世界上最好吃的冰淇淋"理念,将源自意大利百年的冰淇淋工艺引入中国,自从迈入市场以来,一直以时尚动感的品牌形象,倡导内涵深远的冰淇淋文化,在消费者中树立 ...

  4. 自由自在休闲食品以创新助80后女孩成功创业

    前几天接到了何姐的电话,说要来自由自在的总部学习,顺便过来看我,何姐在电话中不断地对我表示感谢,并一再说要请我吃顿大餐表示感谢. 何姐跟我是大学的校友,大我两届,当年何姐大学毕业后回家乡的一家酒店做餐 ...

  5. 自由自在珍珠奶茶 喝出缤纷夏季

    夏天是个需要大量补充水分季节.矿泉水.蒸馏水虽然能解渴,不过却淡而无味,缺乏口感.多种口味的碳酸饮料虽然满足了你的味蕾,解渴的功能却不大.而奶茶既有冰凉消暑的功效,清醇的茶味还能让人精神为之一振. 夏 ...

  6. 自由自在珍珠奶茶以市场细分来创新品牌

    奶茶从上世纪九十年代在中国大陆风靡,大大小小的品牌竞争也使得奶茶市场出现鱼龙混杂的局面,在重新洗牌的过程中,很多小品牌在竞争中被一一踢出局.在这种形势下,自由自在珍珠奶茶却异军突起,迅速抢占市场,成为 ...

  7. 自由自在意式手工冰淇淋走俏仲夏之季

    随着仲夏"热情"的升温,市面上的冰淇淋也变得火爆起来.那种冰凉而入口即化的爽快之感牢牢地抓住了消费者的心. 在熙熙攘攘的商业街中记者找到了今天的采访对象--一间叫"自由自 ...

  8. 自由自在珍珠奶茶让奶茶文化更加多元

    自由自在珍珠奶茶以强势的品牌形象.全新的经营理念.成功的市场定位,迅速得到市场的认可.公司立足于时尚.快捷,服务于大众消费者,推崇绿色.健康.节约的消费文化,以美味.实惠.质优为优势博得广大消费者的喜 ...

  9. 自由自在讲述小资与冰淇淋的美丽生活

    冰淇淋以其甜美时尚的特点受到了小资们的眷顾,很多女性都喜欢在冰淇淋店叫上份冰淇淋,或一人独坐,或三两相谈,就这样消磨一个下午的时光. 冰淇淋之于小资的诱惑就好像与生俱来的本性,自然而美好. " ...

最新文章

  1. 新款iPhone,比绿更绿
  2. Python爬虫遍历文档树
  3. jffs2 启动的常见的问题
  4. Java-数组的使用
  5. 采用rsync实现两台solaris服务之间的文件同步
  6. Docker学习文档之三 其他相关-参考
  7. 【Elasticsearch】es 远程调试
  8. java 线程map_map集合分割以及多线程处理数据
  9. 华为机试HJ50:四则运算
  10. 我与腾讯战斗的那些岁月
  11. Computing the cost J(θ)----吴恩达机器学习作业
  12. 树莓派/Ubuntu联网以及查看本机的IP
  13. 涉密计算机病毒库升级管理,涉密计算机管理制度.doc
  14. soj115 御坂网络
  15. arcgis api for javascript4.18加载天地图服务,并且加载自己的发布的动态地图服务
  16. 【Java】用PriorityQueue优先队列实现最小堆和最大堆
  17. 项立刚:国外品牌很可能输掉3G手机这一战役
  18. Oracle-ASM-PRCR-1079-监听启动报错
  19. koa+vue+百度云实现人脸识别
  20. 智慧灯杆专用单灯控制器产品简介

热门文章

  1. 对游戏某个系统的分析
  2. python中print函数的参数
  3. 排序算法-快速排序的时间复杂度分析
  4. 揭秘 ISO 21448,它是自动驾驶行业的新风向标?
  5. 带外管理及OOB网络
  6. glob.glob()的一个坑
  7. 云-Azure-百科:Azure
  8. Haar特征级联分类器的训练与检测
  9. apple企业开发账号的用途
  10. jar包部署云端之--快速部署