LINQ操作其他数据

一:使用LINQ操作数组和集合

    使用的是LINQ to Object技术(一种新的处理集合的方法)

    举个栗子:

    int[ ] intScores={45,68,80,90,75,76,32};

    //使用LINQ技术从数组中查找及格范围内的分数

    var score=from hgScore in intScores

                    where hgScore>=60

                    orderby hgScore ascending

                    select hgScore;

    Console.WriteLine("及格分数:");

    foreach(var v in score)

    {

        Console.WriteLine(v.ToString());

    }

    Console.ReadLine();

    到这儿,我突然感受到了LINQ to Object的好处,我们再也不用写那么多的嵌套循环来比较,查找一些符合范围的数字了。

    LINQ能够查询任何可枚举的集合,例如数组,泛型集合

二:使用LINQ操作DataSet数据集

    使用的是LINQ to DataSet技术

    几个常用的方法:

    1.AsEnumerable方法   将DataTable对象转换为EnumerableRowCollection<DataRow>对象

        public static EnumerableRowCollection<DataRow>AsEnumerable(this DataTable source)

        source:可以枚举的源DataTable

        返回值:一个IEnumerable<T>对象,其泛型参数T为DataRow

    2.CopyToDataTable方法   将IEnumerable<T>对象中的数据赋值到DataTable对象中

        public static DataTable CopyToDataTable<T>(this IEnumerable<T> source) where T:DataRow

        source:源IEnumerable<T>序列

        返回值:一个DataTable,其中包含DataRow对象的类型的输入序列

     3.AsDataView方法  创建并返回支持LINQ的DataView对象

        public static DataView AsDataView<T>(this EnumerableRowCollection<T>source) where T:DataRow

        source:从中创建支持LINQ的DataView的源LINQ to DataSet查询

        返回值:支持LINQ的DataView对象

    4.Take方法   从序列的开头返回指定数量的连续元素

        public static IEnumerable<TSource> Take<TSource>(this IEnumerable<TSource>source,int count)

        source:要从其返回元素的序列

        count:要返回的元素的数量

        返回值:一个IEnumerable<T>,包含输入序列开头的指定数量的元素

    5.Sum方法  计算数值序列之和

        public static decimal Sum(this IEnumerable<decimal> source)

        source:一个要计算和的Decimal

        返回值:序列值之和

    举个栗子:

    在将数据库中的数据查询出来填充到DataSet中后,我们可以用LINQ查询DataSet中的数据,然后将结果转换为DataTable

    ds:DataSet实例对象

    //使用LINQ从数据集中查询所有数据

    var query=from salary in ds.Tables["tb_Salary"].AsEnumerable()

                    select salary;

    //将查询结果转换为DataTable对象

    DataTable myDataTable=query.CopyToDataTable<DataRow>();

    //设置数据源

    dataGridView1.DataSource=myDataTable;

三:使用LINQ操作XML

    使用LINQ to XML技术

    1.XElement类的Load方法    Xelement类表示一个XML元素,其Load方法用来从文件加载Xelement

        public static XElement Load(string uri)

        uri:一个URI字符串,用来引用加载到新XElement中的文件

        返回值:一个包含指定文件内容的XElement

    2.XElement类的SetAttributeValue方法  SetAttributeValue方法用来设置属性值,添加属性或移除属性

        public void SetAttributeValue(XName name,Object value)

        name:一个XName,其中包含要更改的属性的名称

        value:分配给属性的值。如果该值为null,则移除该属性;否则,会将值转换为其字符串表示形式,并分配给该属性的Value

        属性

    3.XElement类的Add方法   将指定内容添加为此XContainer的子级

        public void Add(Object content)

        content:表示要添加的包含简单内容的对象或内容对象的集合

    4.XElement 类的ReplaceNodes方法    使指定的内容替换为此文档或元素的子节点

        public void ReplaceNodes(Object content)

        content:表示一个用于替换子节点的包含简单内容的对象或内容对象集合

    5.XElement类的Save方法    用来序列化此元素的基础XML树,可以将输出保存到文件、XmlTextWriter、TextWriter或XmlWriter

      public void Save(string fileName)

      fileName:是一个包含文件名称的字符串

      6.XDocument类的Save方法  XDocument类表示XML文档,其Save方法用来将此XDocument序列化为文件,TextWriter或者XmlWriter

        public void Save(string fileName)

        fileName:是一个包含文件名称的字符串

       7.XDeclaration类  XDeclaration类表示一个XML声明

       public XDeclaration(string version,string encoding,string standalone)

        version:XML的版本,通常为0

        encoding:XML文档编码

        standalone:包含yes或者no的字符串,用来指定XML是独立的还是需要解析外部实体

        使用LINQ to XML中技术中的类时,需要添加System.Linq.Xml命名空间

    举个栗子:  将XML文档中的数据读取出来并设置为了DataGridView的数据源

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;

namespace LinqToXml
{
    public partial class Form1 : Form
    {
        static string strPath = "xxx.xml";
        static string strID = "";
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            getXmlInfo();  //窗体加载时加载XML文件
        }
        private void getXmlInfo()
        {
            DataSet myds = new DataSet();
            myds.ReadXml(strPath);              //读取XML结构
            dataGridView1.DataSource = myds.Tables[0];//设置dataGridView1中显示XML文件中的信息
        }
        //点击添加按钮,向xml文件中添加数据
        private void button1_Click(object sender, EventArgs e)
        {
            XElement xe = XElement.Load(strPath);   //加载XML文档
            //创建IEnumerable泛型接口
            IEnumerable<XElement> elements1 = from element in xe.Elements("People")
                                              select element;
            //生成新的编号
            string str = (Convert.ToInt32(elements1.Max(element => element.Attribute("ID").Value)) + 1).ToString("000");
            XElement people = new XElement(
                    "People", new XAttribute("ID", str),
                    new XElement("Name", "张三"),
                    new XElement("Sex", "男")
            );
            xe.Add(people);     //添加XML元素
            xe.Save(strPath);
        }
    }
}

注意:xml文件需要有根元素<root></root>,如果没有的话会报异常

在记事本中是这样的:

运行结果:

刚才是向XML文档插入数据,还有用LINQ to XML技术从XML文档查询

举个栗子:

点击DataGridView单元格时显示某条详细信息:

strID=dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString();    //记录选中的ID编号

XElement xe=XElement.Load(strPath);                                            //加载XML文档

IEnumerable<XElement>elements=from PInfo in xe.Elements("People")

                                                        where PInfo.Attribute("ID").Value==strID

                                                        select PInfo;

foreach(XElement element in elements)     //遍历查找的所有信息

{

    textBox1.Text=element.Element("Name").Value;  //显示员工姓名

    textBox2.Text=element.Element("Sex").Value

}

接下来是修改XML文档

IEnumerable<XElement> elements=from element in xe.Elements("People")

                                                        where element.Attribute("ID").Value==strID

                                                        select element;

if(elements.Count()>0)    //判断是否找到了信息

    XElement newXE=elements.First();   //获取找到的第一条记录

    newXE.SetAttributeValue("ID",strID);   //为XML元素设置属性值

    newXE.ReplaceNodes(

        new XElement("Name","姓名字"),

        new XElement("Sex","新性别")

    );    

xe.Save(strPath);   //保存XML元素到文档

最终就是删除了:

关键代码:

if(elements.Count()>0)

    elements.First().Remove();

xe.Save(strPath);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值