利用Linq写简洁代码

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,利用)