• Linq to Xml 语法


    using System;
    using System.Net;
    using System.Windows;
    using System.Linq;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Ink;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Xml.Linq;
    
    
    using System.Collections.Generic;
    
    namespace LinktoXml.Class
    {
        /*
         *  
             Linq 语言集合查询,主要用于以下几个方面
             1>  Linq to Object :  数据源为实现了接口IEnumerable<T> 或IQueryable<T>的内存数据集合
             2>  Linq to ADO.NET:  数据源为ADO.NET 数据集,这里将数据库中的表结构映射到类结构,并通过ADO.NET从数据库中获取数据集到内存中
                                  通过LINQ进行数据查询
             3>  Linq to XML    :  数据源为XML文档,通过XElement XAttribute等类讲XML文档数据加载到内存中,通过LINQ查询   
         * 
         *           link select grammer keywords
         *    from  : 指定要查找的数据源以及范围变量
         *    select: 指定查询要返回的目标数据,可以指定任何类型,甚至是匿名类型
         *    where :  指定元素的查询条件
         *    orderby: 指定元素的排序字段和排序方法
         *    group : 指定元素的分组字段
         */
        public class LinkUsage
        {
    
            XElement rootE = null;
    
            public LinkUsage()
            {
                rootE = XElement.Load(@"XMLFile1.xml");
            }
    
            /*
             *      Element()  :获取当前XML元素的第一个具有指定名称的子元素
             *      Elements() :获取当前XML元素的所有子元素,或具有指定名称的所有子元素,
             *                  返回类型为IEnumerable<XElement>的可用LINQ进行查询的元素集合
             *      Attribute():获取当前XML元素的具有指定名称的属性
             *      Attributes():获取当前XML元素的所有属性或者具有指定名称的属性,
             *                  返回类型为IEnumerable<XAttribute>的LINQ集合
             */
            public void SingleSelect()
            {
                /*查询根节点下的所有"book"元素节点*/
                IEnumerable<XElement> query =                  //query:查询的结构集
                           from ele in rootE.Elements("book")  //ele 表示通过rootE.Elements("book")查询后的一项数据
                           select ele;                //需要查询的数据项,类型等同于结果集的类型
                /*依次访问查询结果集*/
                String xml = null;
                foreach (XElement e in query)
                {
                    xml = xml + e.ToString() + "\n -------  \n";
                }
                MessageBox.Show(xml);
                
            }
    
            public void queryWhere()
            {
                /*查询根节点下"book 元素节点,满足属性类型为"edu"的节点*/
                IEnumerable<XElement> query =
                                            from ele in rootE.Elements("book")
                                            where ele.Attribute("type").Value == "edu"
                                            select ele;
                String xml = null;
                foreach(XElement e in query)
                {
                    xml = xml + e.ToString() + "\n -------  \n";
                }
                MessageBox.Show(xml);
            }
    
            public void queryOrderBy()
            {
                /*查询根节点下"book 元素节点,满足属性类型为"edu"并且价格大于20的元素*/
                IEnumerable<XElement> query =
                                            from ele in rootE.Elements("book")
                                            where (ele.Attribute("type").Value == "edu" && 
                                                  int.Parse(ele.Element("price").Value) >20)
                                            orderby ele.Attribute("name").Value 
                                            select ele;
                String xml = null;
                foreach(XElement e in query)
                {
                    xml = xml + e.ToString() + "\n -------  \n";
                }
                MessageBox.Show(xml);
            }
    
    
            public void queryFillToList()
            {
                var query =
                            from ele in rootE.Elements("book")
                            select new { author=ele.Element("author").Value,price=ele.Element("price").Value};
    
                String xml = null;
                foreach(var item in query)
                {
                    xml = xml + item.ToString() + "\n -------  \n";
                }
                MessageBox.Show(xml);
            }
        }
    }
    
    XMLFile.xml 文件如下:
    <?xml version="1.0" encoding="utf-8" ?>
    <BookList>
      <book name="english" type="edu">
        <author>zhangweia</author>
        <price>10</price>
      </book>
      <book name="math" type="edu">
        <author>zhangweib</author>
        <price>20</price>
      </book>
      <book name="math1" type="edu">
        <author>zhangweib</author>
        <price>30</price>
      </book>
      <book name="math2" type="rw">
        <author>zhangweib</author>
        <price>40</price>
      </book>
      <book name="math3" type="rw">
        <author>zhangweib</author>
        <price>50</price>
      </book>
      <book name="math4" type="rw">
        <author>zhangweib</author>
        <price>60</price>
      </book>
    </BookList>
    

    SingleSelect 方法结果如图:

    image

    image

    queryWhere 方法结果如图:

    image

    queryOrderBy 方法结果如图:

    image

    queryFillToList 方法结果如图:

    image

  • 相关阅读:
    Core2.0知识整理
    bootbox.js官方文档
    MongoDB分片详解
    MongoDB高可用集群+MMS集群监控搭建
    使用 AcceptTcpClientAsync 进行 异步 操作
    Windows证书操作
    SQL Server查询所有的表名、字段名、注释
    【转载】ASP.NET Core Web 支付功能接入 微信-扫码支付篇
    【转载】ASP.NET Core Web 支付功能接入 支付宝-电脑网页支付篇
    C#网络编程系列文章
  • 原文地址:https://www.cnblogs.com/zhangweia/p/1944918.html
Copyright © 2020-2023  润新知