LINQ的类型
在MSDN官方文件中,LINQ分为几种类型:
. LINQ to Objects(或称LINQ to Collection),这是LINQ的基本功能,针对集合对象进行查询处理,包括基本的汇总与过滤都在这个功能内实现。
. LINQ to SQL,这是LINQ功能的SQL Server数据库版本,通过LINQ指令,可以直接查询SQL Server数据库,而完全无须编写SQL指令,这个功能在推出初期受到了相当大的关注,目前这个功能已经融入EF内。
. LINQ to XML,是针对XML设计的LINQ功能,它通过XDocument与XElement两个主要类的功能,进行LINQ语法解析与XML内的元素的查询操作。可用来替代现有以XPath方式解析XML文件的功能。
. LINQ to DataSet(或称LINQ to ADO.NET),是为现有以DataSet或DataTable对象开发应用程序提供支持LINQ操作的功能,以AsEnumerate()为基础,将DataSet与DataTable内的数据转换成IEnumerable接口的集合对象,即可直接使用LINQ to Objects的方式查询。
什么是LINQ to XML?
LINQ to XML 是一种启用了 LINQ 的内存 XML 编程接口,使用它,可以在 .NET Framework 编程语言中处理 XML。
LINQ to XML 将 XML 文档置于内存中,这一点很像文档对象模型 (DOM)。您可以查询和修改 XML 文档,修改之后,可以将其另存为文件,也可以将其序列化然后通过 Internet 发送。但是,LINQ to XML 与 DOM 不同:它提供一种新的对象模型,这是一种更轻量的模型,使用也更方便,这种模型利用了 Visual C# 2008 在语言方面的改进。
LINQ to XML 最重要的优势是它与 语言集成查询 (LINQ) 的集成。由于实现了这一集成,因此,可以对内存 XML 文档编写查询,以检索元素和属性的集合。LINQ to XML 的查询功能在功能上(尽管不是在语法上)与 XPath 和 XQuery 具有可比性。Visual C# 2008 集成 LINQ 后,可提供更强的类型化功能、编译时检查和改进的调试器支持。
LINQ to XML 的另一个优势是通过将查询结果用作 XElement 和 XAttribute 对象构造函数的参数,实现了一种功能强大的创建 XML 树的方法。这种方法称为“函数构造”,利用这种方法,开发人员可以方便地将 XML 树从一种形状转换为另一种形状。
下面是对于XML文件的相关操作。。。。。。
1、导出XML
/// <summary> /// 导出XML /// </summary> /// <returns></returns> public ActionResult ReportXml() { try { #if DEBUG List<UserInfo> user = new List<UserInfo>() { new UserInfo(){UserId="1",UserName="张三",UserSex="男",UserAge=18}, new UserInfo(){UserId="2",UserName="李四",UserSex="男",UserAge=18}, new UserInfo(){UserId="3",UserName="王五",UserSex="男",UserAge=18}, new UserInfo(){UserId="4",UserName="赵六",UserSex="女",UserAge=18}, }; #endif XmlTextWriter myXml = new XmlTextWriter(@"C:User.xml", null); // 设置缩进 myXml.Formatting = Formatting.Indented; // 编写版本为“1.0”并具有独立特性的 XML 声明。 myXml.WriteStartDocument(false); myXml.WriteStartElement("UserInfo"); // 注释 myXml.WriteComment("记录用户的信息"); foreach (var item in user) { myXml.WriteStartElement("User"); myXml.WriteAttributeString("UserId", item.UserId.ToString()); myXml.WriteElementString("UserName", item.UserName); myXml.WriteElementString("UserSex", item.UserSex); myXml.WriteElementString("UserAge", item.UserAge.ToString()); myXml.WriteEndElement(); } myXml.Flush(); myXml.Close(); return Json(new { msg = "导出成功" }, JsonRequestBehavior.AllowGet); } catch (Exception) { return Json(new { msg = "导出失败" }, JsonRequestBehavior.AllowGet); } }
2、读取XML
/// <summary> /// 读取XML /// </summary> /// <returns></returns> public ActionResult ReadXml() { List<UserInfo> list = new List<UserInfo>(); XElement xe = XElement.Load(@"C:User.xml"); IEnumerable<XElement> elements = from p in xe.Elements("User") select p; foreach (var item in elements) { UserInfo user = new UserInfo(); user.UserId = item.Attribute("UserId").Value; user.UserName = item.Element("UserName").Value; user.UserSex = item.Element("UserSex").Value; user.UserAge = int.Parse(item.Element("UserAge").Value); list.Add(user); } return Json(list.ToList(), JsonRequestBehavior.AllowGet); }
3、删除一条XML数据
/// <summary> /// 删除XML /// </summary> /// <param name="userId"></param> /// <returns></returns> public ActionResult DeleteXML(string userId) { try { XElement xe = XElement.Load(@"C:User.xml"); IEnumerable<XElement> elements = from p in xe.Elements("User") where p.Attribute("UserId").Value == userId.ToString() select p; if (elements.Count() > 0) { elements.Remove(); } xe.Save(@"C:User.xml"); return Json(new { flag = true }, JsonRequestBehavior.AllowGet); } catch (Exception) { return Json(new { flag = false }, JsonRequestBehavior.AllowGet); } }
4、添加一条XML数据
/// <summary> /// 新增XML /// </summary> /// <returns></returns> public ActionResult AddXML() { try { XElement xe = XElement.Load(@"C:User.xml"); XElement record = new XElement( new XElement("User", new XAttribute("UserId", Guid.NewGuid()), new XElement("UserName", "张学友"), new XElement("UserSex", "男"), new XElement("UserAge", "20") )); xe.Add(record); xe.Save(@"C:User.xml"); return Json(new { flag = true }, JsonRequestBehavior.AllowGet); } catch (Exception) { return Json(new { flag = false }, JsonRequestBehavior.AllowGet); } }
5、修改一条XML数据
/// <summary> /// 编辑XML /// </summary> /// <param name="userId"></param> /// <returns></returns> public ActionResult EditXML(string userId) { try { XElement xe = XElement.Load(@"C:User.xml"); IEnumerable<XElement> elements = from p in xe.Elements("User") where p.Attribute("UserId").Value == userId.ToString() select p; if (elements.Count() > 0) { XElement model = elements.FirstOrDefault(); // 设置新属性 model.SetAttributeValue("UserId", userId); // 更新新节点 model.ReplaceNodes ( new XElement("UserName", "周杰伦"), new XElement("UserSex", "男"), new XElement("UserAge", 30) ); } xe.Save(@"C:User.xml"); return Json(new { flag = true }, JsonRequestBehavior.AllowGet); } catch (Exception) { return Json(new { flag = false }, JsonRequestBehavior.AllowGet); } }
6、前台页面代码
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <script src="~/Scripts/jquery-1.10.2.js"></script> <script type="text/javascript"> $(function () { $("#btnReport").click(function () { ReportXml(); }); $("#btnRead").click(function () { ReadXml(); }); $(document).on({ click: function (e) { DeleteXML($(this).attr("userId")); } }, ".btndelete"); $("#btnAdd").click(function () { AddXML(); }); $(document).on({ click: function (e) { EditXML($(this).attr("userId")); } }, ".btnEdit"); }); // 导出XML function ReportXml() { var option = { url: '/XML/ReportXml', type: "post", success: function (data) { if (data.msg) { alert("导出成功!"); } else { alert("导出失败!"); } } }; $.ajax(option); } // 读取XML function ReadXml() { var option = { url: '/XML/ReadXml', type: "get", success: function (data) { $("#tb_table tr:gt(0)").remove(); var html = ""; $.each(data, function (index, item) { html += "<tr>"; html += "<td>" + item.UserName + "</td>"; html += "<td>" + item.UserSex + "</td>"; html += "<td>" + item.UserAge + "</td>"; html += "<td><input class='btndelete' type='button' userId='" + item.UserId + "' value='删除'/><input class='btnEdit' type='button' userId='" + item.UserId + "' value='修改'/></td>"; html += "</tr>"; }); $("#tb_table").append(html); } }; $.ajax(option); } // 删除 function DeleteXML(userId) { if (confirm("确定要删除吗?")) { var option = { url: '/XML/DeleteXML', type: 'get', data: { userId: userId }, success: function (data) { if (data.flag) { alert("删除成功!"); ReadXml(); } else { alert("删除失败!"); } } }; $.ajax(option); } } // 添加XML function AddXML() { var options = { url: '/XML/AddXML', type: 'get', success: function (data) { if (data.flag) { alert("新增成功!"); ReadXml(); } else { alert("新增失败!"); } } }; $.ajax(options); } // 修改XML function EditXML(userId) { var options = { url: '/XML/EditXML', type: 'get', data: { userId: userId }, success: function (data) { if (data.flag) { alert("修改成功!"); ReadXml(); } else { alert("修改失败!"); } } }; $.ajax(options); } </script> </head> <body> <div> <input type="button" value="导出XML" id="btnReport" /> <input type="button" value="读取XML" id="btnRead" /> <input type="button" value="添加XML" id="btnAdd" /> </div> <br /><br /> <table id="tb_table" border="1"> <tr> <td>姓名</td> <td>性别</td> <td>年龄</td> <td>操作</td> </tr> </table> <br /> </body> </html>
7、页面效果
权责申明
作者:SportSky 出处: http://www.cnblogs.com/sportsky/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。