利用Linq写简洁代码

标签: 利用 linq 代码 | 发表时间:2011-10-12 11:56 | 作者:老衲爱封装 Xin
出处:http://www.cnblogs.com/

1.xml读写

d盘下有Demo.xml,内容如下

<?xml version="1.0" encoding="utf-8" ?>
<Earthworm>
<Demo>
<Aspect name="">
<Advice type="before" assembly="" className="">
<MethodName>asd</MethodName>
<MethodName>kll</MethodName>
</Advice>
<Advice type="stop" assembly="" className="">
<MethodName></MethodName>
<MethodName></MethodName>
</Advice>
<Advice type="after" assembly="" className="">
<MethodName></MethodName>
<MethodName></MethodName>
</Advice>
</Aspect>
</Demo>
</Earthworm>

现在想获取type为before的所有MethodName的节点值

普通读取方法

XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(@"d:\demo.xml");
XmlNodeList nodelist = xmldoc.SelectNodes("Earthworm/Demo/Aspect/Advice[@type='before']/MethodName");
foreach (XmlNode node in nodelist)
{
Console.WriteLine(node.InnerText);
}

Linq To Xml 读取方法

var dname = from k in  (from m in XDocument.Load("d:\\zhongming.xml").Descendants("Advice") 
where m.Attribute("type").Value == "before" select m).Descendants("MethodName") select k.Value;//一句话搞定,很给力
foreach (var a in dname)
{
Console.WriteLine(a);
}

2.查找普通对象

有如下数组:

int[] data = new int[] {12,23,445,666,777,90,33,2,0,-89 };

想查找大于50的对象

 

普通方法

var findObjects = new List<int>();
foreach (int i in data)
{
if (i > 50)
{
findObjects.Add(i);
}
}

 

Linq方法

 var findObjects=from d in data where d>50 select d;//同样是一句话

 


3.查找动态对象

     class People
{
/// <summary>
/// 姓名
/// </summary>
public string Name{get;set;}
/// <summary>
/// 年龄
/// </summary>
public int Age{get;set;}
/// <summary>
/// 性别
/// </summary>
public bool Gender { get; set; }
}


有如下数据

People[] data = new People[] { new People{Name="西门吹雪",Gender=true,Age=1200},
new People{Name="令狐冲",Gender=true,Age=999},
new People{Name="任盈盈",Gender=false,Age=456},
new People{Name="欧阳锋",Gender=true,Age=9999},
new People{Name="黄药师",Gender=true,Age=670},
new People{Name="吴世龙",Gender=true,Age=25}};

想查找所有的People的姓名和年龄

普通方法

必须建造一个结构体或类,用来存储姓名和年龄,结构体如下

struct DynamicObject
{
public string Name;
public int Age;
}

然后查找

List<DynamicObject> objs = new List<DynamicObject>();
foreach (People p in data)
{
objs.Add(new DynamicObject { Name = p.Name, Age = p.Age });
}

linq方法

var objects = from d in data select new { d.Name, d.Age };

还有更牛的是优化过程

比如那个读xml的你是这样写的

var doc = XDocument.Load(@"d:\demo.xml");
var list=from m in doc.Descendants("Advice") where m.Attribute("type").Value == "before" select m;
var datas=from k in list.Descendants("MethodName") select k.Value;
foreach (var a in datas)
{
Console.WriteLine(a);
}


编译完成之后,拿一Reflector看,是这个样子的

  IEnumerable<string> datas = from k in (from m in XDocument.Load(@"d:\demo.xml").Descendants("Advice")
where m.Attribute("type").Value == "before"
select m).Descendants<XElement>("MethodName") select k.Value;//变成一句了哦
foreach (string a in datas)
{
Console.WriteLine(a);
}

 就讲这么多,其他的一起探索吧

作者: 老衲爱封装 发表于 2011-10-12 11:56 原文链接

评论: 5 查看评论 发表评论


最新新闻:
· 扎克伯格力挺Timeline功能 曝多张私人照片(2011-10-12 16:37)
· 微软收购Skype障碍尽扫 IM市场或上演三国杀(2011-10-12 16:35)
· 马云表态:我们相信自己的决定(2011-10-12 16:32)
· Adobe将为亚太地区举办首届网络直播虚拟大会(2011-10-12 16:22)
· 乔布斯生前释疑为何爱穿圆领衫:受索尼启发(2011-10-12 16:14)

编辑推荐:ASP.Net MVC3 简单入门第一季(四)

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [利用 linq 代码] 推荐:

利用Linq写简洁代码

- Xin - 博客园-首页原创精华区
d盘下有Demo.xml,内容如下. 现在想获取type为before的所有MethodName的节点值. Linq To Xml 读取方法. where m.Attribute("type").Value == "before" select m).Descendants("MethodName") select k.Value;//一句话搞定,很给力.

LINQ技术、EF技术都出来蛮久了,软件开发者、软件公司是否还有必要有自己的代码生成器?

- cchitsiang - 博客园-首页原创精华区
   有一段时间,也怀疑自己,是否有必要继续维护代码生成器. 因为微软的LINQ技术、EF技术都出来了,而且资料也开始越来越多了,代码生成器的功能越来越被这些新技术取代了,是否有必要还继续维护代码生成器. 今年的3件事情给了一些启发、加强了对代码生成器的认识高度.    1:在国家某部委开发项目,数据库需要用的是Oracle,而且需要控制的数据有上千万条记录,也不用SQLServer数据库,LINQ技术、EF技术派不上用处,应该也是暂时无法用得那么熟练,记得只对SQLServer数据库的支持是很好.

利用旧版Android漏洞的E-Z-2-Use攻击代码已在Metasploit发布

- - FreeBuf.COM
利用旧版Android漏洞的E-Z-2-Use攻击代码发布利用Android操作系统WebView编程接口漏洞的攻击代码已作为一个模块加入到开源漏洞利用框架Metasploit中. 漏洞影响Android 4.2之前的版本,Google在Android 4.2中修正了这个漏洞,但根据官方统计,超过五成用户仍然使用存在漏洞的旧版本.

代码重构

- - ITeye博客
随着程序的演化,我们有必要重新思考早先的决策,并重写部分代码. 代码需要演化;它不是静态的事物. 重写、重做和重新架构代码合起来,称为重构.    当你遇到绊脚石  ---  代码不在合适,你注意到有两样东西其实应该合并或是其他任何对你来说是"错误"的东西  -------- . 如果代码具备以下特征,你都应该考虑重构代码:.

代码小比较

- Tim - 斯巴达第二季
判断上百万个4k的buffer是否为全0,我最先想到的办法是:zero_buffer = malloc(4096);. /* 循环百万次读取buffer */.         /* 全0 */. 由于好奇,看看shell工具cp的代码,它的解决办法是:. /* 循环百万次读取buffer */.         /* 全0 */.

两行 JavaScript 代码

- MessyCS - Dreamer&#39;s Blog
最近看到了两行 JavaScript 代码,很受启发. 在 JavaScript 中,我们可以获取HTML元素的属性值,例如 element.id. 但是,因为 for 和 class 是 JavaScript 中的关键字,所以在 JavaScript 中这两个属性名称分别用 htmlFor 和 className 代替,于是在封装的时候需要先对这两个属性进行特殊判断.

Netty代码分析

- LightingMan - 淘宝JAVA中间件团队博客
Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序[官方定义],整体来看其包含了以下内容:1.提供了丰富的协议编解码支持,2.实现自有的buffer系统,减少复制所带来的消耗,3.整套channel的实现,4.基于事件的过程流转以及完整的网络事件响应与扩展,5.丰富的example.

python代码调试

- - 阿里古古
【转自: http://blog.csdn.net/luckeryin/article/details/4477233】. 本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序. 例如,有模拟税收计算的程序:. debug_demo函数计算4500的入账所需的税收. 在需要插入断点的地方,加入红色部分代码:如果_DEBUG值为True,则在该处开始调试(加入_DEBUG的原因是为了方便打开/关闭调试).

ios代码开源

- - CSDN博客移动开发推荐文章
本人从10年开始搞ios开发,从菜鸟到现在的入门,期间遇到了许多困难,也总结了一些东西,本着开源精神,希望大家共同成长的目的把这个工程开源出来.. 这个工程是从11年到13年之前完成的.主要是我平时用到的一些基础功能模块.其中有其他开源的代码和我自己写的一些.代码结构基本乱,12年以后的代码结构还可以,不是很乱,之前水平有限,如果不怎么样就别喷我了.

Oracle错误代码

- - 数据库 - ITeye博客
ORA-00001: 违反唯一约束条件 (.). ORA-00017: 请求会话以设置跟踪事件. ORA-00018: 超出最大会话数. ORA-00019: 超出最大会话许可数. ORA-00020: 超出最大进程数 (). ORA-00021: 会话附属于其它某些进程;无法转换会话. ORA-00022: 无效的会话 ID;访问被拒绝.