概述
Linq也就是Language Integrated Query的缩写,即语言集成查询,是微软在.Net 3.5中提出的一项新技术。
Linq主要包含4个组件---Linq to Objects、Linq to XML、Linq to DataSet 和Linq to SQL。
一、使用Linq创建XML文件
1 public static class XMLFileHelper
2 {
3 ///
6 ///
7 private static void CreateXmlFile(string xmlPath)
8 {
9 try
10 {
11 //定义一个XDocument结构
12 object[] content = new object[20];
13 content[0] = new XElement("User", new XAttribute("Id", "1"),
14 new XElement("Name", "Jack"),
15 new XElement("Password", "123456"),
16 new XElement("Description", "I am Jack")
17 );
18 content[1] = new XElement("User", new XAttribute("Id", "2"),
19 new XElement("Name", "Mary"),
20 new XElement("Password", "135678"),
21 new XElement("Description", "I am Mary")
22 );
23 content[2] = new XAttribute("Id", "root");
24
25 content[3] = new XElement("User", new XAttribute("Id", "3"),
26 new XElement("Name", "Tom"),
27 new XElement("Password", "654123"),
28 new XElement("Description", "I am Tom")
29 );
30
31 XDocument myXDoc = new XDocument(new XElement("Users", content));
32 myXDoc.Save(xmlPath);
33 }
34 catch (Exception ex)
35 {
36 Console.WriteLine(ex.ToString());
37 }
38 }
39 }
创建后的xml文件如下所示:
二、使用Linq读取Xml文件
1 public static void GetXmlNodeInformation(string xmlPath)
2 {
3 try
4 {
5 //定义并从xml文件中加载节点(根节点)
6 XElement rootNode = XElement.Load(xmlPath);
7 //查询语句: 获得根节点下name子节点(此时的子节点可以跨层次:孙节点、重孙节点……)
8 IEnumerable
9 where target.Value.Contains("a")
10 select target;
11 foreach (XElement node in targetNodes)
12 {
13 Console.WriteLine("Name = {0}", node.Value);
14 }
15 Console.WriteLine();
16 IEnumerable
17 where myTarget.HasElements
18 select myTarget;
19 foreach (XElement node in myTargetNodes)
20 {
21 Console.WriteLine("Name = {0}", node.Element("Name").Value);
22 Console.WriteLine("Password = {0}", node.Element("Password").Value);
23 Console.WriteLine("Description = {0}", node.Element("Description").Value);
24 Console.WriteLine();
25 }
26 }
27 catch (Exception ex)
28 {
29 Console.WriteLine(ex.ToString());
30 }
31 }
运行结果如下:
三、使用Linq修改Xml文件
1 public static void ModifyXmlNodeInformation(string xmlPath)
2 {
3 try
4 {
5 //定义并从xml文件中加载节点(根节点)
6 XElement rootNode = XElement.Load(xmlPath);
7 IEnumerable
8 where target.Element("Name").Value=="Mary"
9 select target;
10 //遍历所获得的目标节点(集合)
11 foreach (XElement node in targetNodes)
12 {
13 //将用户名为Mary的User节点修改为Emma
14 node.Element("Name").SetValue("Emma");
15 node.Element("Description").SetValue("I am Emma");
16 }
17 //保存对xml的更改操作
18 rootNode.Save(xmlPath);
19 }
20 catch (Exception ex)
21 {
22 Console.WriteLine(ex.ToString());
23 }
24 }
修改后的xml文件如下所示:
四、添加新节点
1 public static void AddXmlNodeInformation(string xmlPath)
2 {
3 try
4 {
5 //定义并从xml文件中加载节点(根节点)
6 XElement rootNode = XElement.Load(xmlPath);
7 //定义一个新节点
8 XElement newNode = new XElement("User", new XAttribute("Id", "4"),
9 new XElement("Name", "Rose"),
10 new XElement("Password", "333333"),
11 new XElement("Description", "I am Rose"));
12 //将此新节点添加到根节点下
13 rootNode.Add(newNode);
14 //保存对xml的更改操作
15 rootNode.Save(xmlPath);
16 }
17 catch (Exception ex)
18 {
19 Console.WriteLine(ex.ToString());
20 }
21 }
结果如下:
五、删除节点
1 public static void DeleteXmlNodeInformation(string xmlPath)
2 {
3 try
4 {
5 //定义并从xml文件中加载节点(根节点)
6 XElement rootNode = XElement.Load(xmlPath);
7 //查询语句: 获取ID属性值等于"999999"的所有User节点
8 IEnumerable
9 let id= Convert.ToInt32(target.Attribute("Id").Value)
10 where id >=3
11 select target;
12
13 targetNodes.Remove();
14 //保存对xml的更改操作
15 rootNode.Save(xmlPath);
16
17 }
18 catch (Exception ex)
19 {
20 Console.WriteLine(ex.ToString());
21 }
22 }
运行结果如下:
六、实际应用---判断桌面上是否存在指定文件以及具体路径
1 private static string FileQuery(string targetFileName)
2 {
3 string myDeskTopDir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
4 string []fileNames = Directory.GetFiles(myDeskTopDir, "*.*", SearchOption.AllDirectories);
5 List
6 foreach(var fileName in fileNames)
7 {
8 files.Add(new FileInfo(fileName));
9 }
10 var results = from file in files
11 where file.Name == targetFileName
12 select file;
13 StringBuilder queryResult = new StringBuilder();
14 foreach(var result in results)
15 {
16 queryResult.AppendLine("Query Result:" + result.FullName);
17 }
18 return queryResult.ToString();
19 }
手机扫一扫
移动阅读更方便
你可能感兴趣的文章