LinqToObject(2)——自由自在

简介: 对于Linq查询有几个要点,数据源,元素,投影。把握这几个要点,那么运用起来得心应手。  (一)查找句子 这里指的句是是英文句子,英文句子以.!?结束(逗点,叹号,问号)。下面摘取《The Call of the Wild》一段来进行介绍。

对于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

 

 

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

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

  

 

 

 

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

这个相对比较简单:

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非常有用。

 

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
C# UED 自然语言处理
在WPF中实现图片一边下载一边显示
原文 在WPF中实现图片一边下载一边显示 当我们上网查看一个较大的图片时,浏览器能一边下载一边显示,这样用户体验是比较好的,但在WPF程序中,当我们通过如下方式显示一幅图片时:     img.Source = new BitmapImage(new Uri("http://localhost:8000/www/test.jpg")); 只能等到图片下载完成时才能显示出来,当图片较大时需要等待很久,即使在旁边放个进度条给人的感觉仍然不好。
1072 0
|
6天前
|
调度 云计算 芯片
云超算技术跃进,阿里云牵头制定我国首个云超算国家标准
近日,由阿里云联合中国电子技术标准化研究院主导制定的首个云超算国家标准已完成报批,不久后将正式批准发布。标准规定了云超算服务涉及的云计算基础资源、资源管理、运行和调度等方面的技术要求,为云超算服务产品的设计、实现、应用和选型提供指导,为云超算在HPC应用和用户的大范围采用奠定了基础。
179581 20
|
14天前
|
存储 运维 安全
云上金融量化策略回测方案与最佳实践
2024年11月29日,阿里云在上海举办金融量化策略回测Workshop,汇聚多位行业专家,围绕量化投资的最佳实践、数据隐私安全、量化策略回测方案等议题进行深入探讨。活动特别设计了动手实践环节,帮助参会者亲身体验阿里云产品功能,涵盖EHPC量化回测和Argo Workflows量化回测两大主题,旨在提升量化投研效率与安全性。
云上金融量化策略回测方案与最佳实践
|
16天前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
9344 23
|
19天前
|
Cloud Native Apache 流计算
资料合集|Flink Forward Asia 2024 上海站
Apache Flink 年度技术盛会聚焦“回顾过去,展望未来”,涵盖流式湖仓、流批一体、Data+AI 等八大核心议题,近百家厂商参与,深入探讨前沿技术发展。小松鼠为大家整理了 FFA 2024 演讲 PPT ,可在线阅读和下载。
5011 15
资料合集|Flink Forward Asia 2024 上海站
|
20天前
|
自然语言处理 数据可视化 API
Qwen系列模型+GraphRAG/LightRAG/Kotaemon从0开始构建中医方剂大模型知识图谱问答
本文详细记录了作者在短时间内尝试构建中医药知识图谱的过程,涵盖了GraphRAG、LightRAG和Kotaemon三种图RAG架构的对比与应用。通过实际操作,作者不仅展示了如何利用这些工具构建知识图谱,还指出了每种工具的优势和局限性。尽管初步构建的知识图谱在数据处理、实体识别和关系抽取等方面存在不足,但为后续的优化和改进提供了宝贵的经验和方向。此外,文章强调了知识图谱构建不仅仅是技术问题,还需要深入整合领域知识和满足用户需求,体现了跨学科合作的重要性。
|
27天前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
15天前
|
人工智能 容器
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
本文介绍了如何利用千问开发一款情侣刮刮乐小游戏,通过三步简单指令实现从单个功能到整体框架,再到多端优化的过程,旨在为生活增添乐趣,促进情感交流。在线体验地址已提供,鼓励读者动手尝试,探索编程与AI结合的无限可能。
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
|
15天前
|
消息中间件 人工智能 运维
12月更文特别场——寻找用云高手,分享云&AI实践
我们寻找你,用云高手,欢迎分享你的真知灼见!
1174 71