当前位置: 首页 > news >正文

C#中LINQtoObjects、LINQtoDataSet和LINQtoXML

目录

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

二、使用LINQ操作DataSet数据集

1.AsEnumerable()方法

2.CopyToDataTable()方法

3.AsDataView()方法

4.Take()方法

5.Sum()方法

6.示例

(1)源码

(2)生成效果

三、使用LINQ操作XML

1.XElement类的Load()方法

2.XElement类的SetAttributeValue()方法

3.XElement类的Add()方法

4.XElement类的ReplaceNodes()方法

5.XElement类的Save()方法

6.XDocument类的Save()方法

7.XDeclaration类

8.示例

(1)源码

(2)生成效果


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

        对数组和集合进行操作时可以使用LINQtoObjects技术(一种新的处理集合的方法)。只需编写描述要检索的内容的声明性代码。LINQtoObjects直接使用LINQ查询IEnumerable或IEnumerable<T>集合,使用LINQ能够查询任何可枚举的集合,例如数组、泛型列表等。

// LINQ to Objects
// 使用LINQ操作数组和集合namespace _08
{class Program{/// <summary>/// 定义一个数组1/// 使用LINQ技术从数组中查找及格范围内的数并存储于数组2/// 遍历输出数组2/// </summary>static void Main(String[] args){if (args is null)                           //解除IDE0060{throw new ArgumentNullException(nameof(args));}int[] _Scores = { 45, 68, 80, 90, 75, 76, 32 }; var _Score = from High_score in _Scoreswhere High_score >= 60orderby High_score ascending  select High_score;Console.WriteLine("及格的分数:");foreach(var sc in _Score) { Console.WriteLine(sc.ToString());}Console.ReadLine();}}
}
//运行结果:
//及格的分数:
//68
//75
//76
//80
//90

二、使用LINQ操作DataSet数据集

        对DataSet数据集进行操作时可以使用LINQtoDataSet技术(LINQ to ADO.NET中的一种独立技术),使查询DataSet对象更加方便、快捷。

        LINQtoDataSet技术中的常用方法:

1.AsEnumerable()方法

        AsEnumerable()方法可以将DataTable对象转换为EnumerableRowCollection <DataRow>对象:

public static EnumerableRowCollection<DataRow>AsEnumerable(this DataTable source)
☑ source:可枚举的源DataTable。
☑ 返回值:一个IEnumerable<T>对象,其泛型参数T为DataRow。

2.CopyToDataTable()方法

        CopyToDataTable()方法用来将IEnumerable<T>对象中的数据赋值到DataTable对象中:

public static DataTable CopyToDataTable<T>(this IEnumerable<T>source)where T:DataRow
☑ source:源IEnumerable<T>序列。
☑ 返回值:一个DataTable,其中包含作为DataRow对象的类型的输入序列。

3.AsDataView()方法

        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()方法

        Take()方法用来从序列的开头返回指定数量的连续元素:

public static IEnumerable<TSource>Take<TSource>(this IEnumerable<TSource>source,int count)
☑ source:要从其返回元素的序列。
☑ count:要返回的元素数量。
☑ 返回值:一个IEnumerable<T>,包含输入序列开头的指定数量的元素。

5.Sum()方法

        Sum()方法用来计算数值序列之和:

public static decimal Sum(this IEnumerable<decimal>source)
☑ source:一个要计算和的Decimal值序列。
☑ 返回值:序列值之和

        上面介绍的几种方法都有多种重载形式。

6.示例

        使用了LINQ to DataSet技术的AsEnumerable() 方法和CopyToDataTable()方法。

(1)源码

//Form1.cs
// LINQ to DataSet
// 使用LINQ操作DataSet数据集
// 使用了LINQ to DataSet技术的AsEnumerable() 方法和CopyToDataTable()方法
using System;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Windows.Forms;namespace _09
{public partial class Form1 : Form{public Form1(){InitializeComponent();}public string _strCon;/// <summary>/// LINQ to DataSet流程:/// SqlConnection实例化/// SqlDataAdapter实例化/// DataSet实例化/// 使用LINQ从数据集中查询所有数据/// 将查询结果生成DataTable,并作为dataGridView1的数据源/// </summary>private void Form1_Load(object sender, EventArgs e){dataGridView1.Dock = DockStyle.Fill;_strCon = "Data Source=DESKTOP-3LV13FS;Initial Catalog=db_CSharp;Integrated Security=True";    //定义数据库连接字符串SqlConnection sqlcon = new SqlConnection(_strCon);                                                                      //实例化数据库连接对象SqlDataAdapter sqlda = new SqlDataAdapter("select * from tb_Salary", sqlcon);                               //实例化数据库桥接器对象DataSet myds = new DataSet();                                                          //实例化数据集对象sqlda.Fill(myds, "tb_Salary");                                                               //填充DataSet数据集var Query = from salary in myds.Tables["tb_Salary"].AsEnumerable()    //使用LINQ从数据集中查询所有数据select salary;DataTable myDTable = Query.CopyToDataTable<DataRow>();           //将查询结果转化为DataTable对象dataGridView1.DataSource = myDTable;                                            //显示查询到的数据集中的信息}}   
}

(2)生成效果

三、使用LINQ操作XML

        对XML文件进行操作时可以使用LINQtoXML技术(LINQ技术中的一种,提供了修改文档对象模型的内存文档,并支持LINQ查询表达式等功能)。

1.XElement类的Load()方法

        Xelement类表示一个XML元素,其Load()方法用来从文件加载Xelement:

public static XElement Load(string url) 
☑ url:一个url字符串,用来引用要加载到新XElement中的文件。
☑ 返回值:一个包含指定文件内容的XElement。

2.XElement类的SetAttributeValue()方法

        SetAttributeValue()方法用来设置属性的值、添加属性或移除属性。

public void SetAttributeValue(XName name,Object value)
☑ name:一个XName,其中包含要更改的属性的名称。
☑ value:分配给属性的值。如果该值为null,则移除该属性;否则,会将值转换为其字符串表示形式,并分配给该属性的Value属性。

3.XElement类的Add()方法

        Add()方法用来将指定的内容添加为此XContainer的子级。

public void Add(Object content) 
content表示要添加的包含简单内容的对象或内容对象集合。

4.XElement类的ReplaceNodes()方法

        ReplaceNodes()方法用来使用指定的内容替换此文档或元素的子节点。

public void ReplaceNodes(Object content)
content表示一个用于替换子节点的包含简单内容的对象或内容对象集合。

5.XElement类的Save()方法

        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的版本,通常为“1.0”。
☑ encoding:XML文档的编码。
☑ standalone:包含yes或no的字符串,用来指定XML是独立的还是需要解析外部实体。

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

8.示例

        使用了XElement类的Load()方法、XElement类的Add()方法、XElement类的Save()方法。使用了Xnode类的Remove()方法。

(1)源码

//Form1.cs
// LINQ to XML
// 使用LINQ操作XML
// 使用了XElement类的Load()方法、XElement类的Add()方法、XElement类的Save()方法
// 使用了Xnode类的Remove()方法
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 static System.Windows.Forms.VisualStyles.VisualStyleElement;
using System.Xml.Linq;namespace _10
{public partial class Form1 : Form{public Form1(){InitializeComponent();}public static string _strPath = "Employee.xml"; //文件放在DEBUG根目录public static string _strID = "";/// <summary>/// 初始化Form1/// 调用自定义方法加载XML文件/// </summary>private void Form1_Load(object sender, EventArgs e){label1.Text = "姓名:";label2.Text = "薪水:";label3.Text = "性别:";button1.Text = "添加";button2.Text = "修改";button3.Text = "删除";groupBox1.Text = "LINQtoXML操作XML文件";comboBox1.Items.AddRange(new object[] { "男", "女" });button1.Size = new Size(40, 21);button2.Size = new Size(40, 21);button3.Size = new Size(40, 21);comboBox1.Size = new Size(40, 21);textBox1.Size = new Size(80, 21);textBox2.Size = new Size(60, 21);GetXmlInfo();   //窗体加载时加载XML文件}#region 将XML文件内容绑定到DataGridView控件/// <summary>/// 将XML文件内容绑定到DataGridView控件/// 定义一个数据集合并利用其ReadXml()方法绑定XML文件///  dataGridView1的数据源=数据集合/// </summary>private void GetXmlInfo(){DataSet myds = new DataSet();myds.ReadXml(_strPath);dataGridView1.DataSource = myds.Tables[0];}#endregion/// <summary>/// 添加/// 使用了XElement类的Load()方法、XElement类的Add()方法、XElement类的Save()方法/// </summary>private void Button1_Click(object sender, EventArgs e){XElement xe = XElement.Load(_strPath);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", textBox1.Text),new XElement("Sex", comboBox1.Text),new XElement("Salary", textBox2.Text));xe.Add(people);xe.Save(_strPath);GetXmlInfo();}/// <summary>/// 修改/// 使用了XElement类的Load()方法、XElement类的Save()方法/// </summary>private void Button2_Click(object sender, EventArgs e){if (_strID != ""){XElement xe = XElement.Load(_strPath);IEnumerable<XElement> elements = from element in xe.Elements("People")where element.Attribute("ID").Value == _strIDselect element;if (elements.Count() > 0){XElement newXE = elements.First();newXE.SetAttributeValue("ID", _strID);newXE.ReplaceNodes(new XElement("Name", textBox1.Text),new XElement("Sex", comboBox1.Text),new XElement("Salary", textBox2.Text));}xe.Save(_strPath);}GetXmlInfo();}/// <summary>/// 删除/// 使用了XElement类的Load()方法、XElement类的Save()方法、Xnode类的Remove()方法/// </summary>private void Button3_Click(object sender, EventArgs e){if (_strID != ""){XElement xe = XElement.Load(_strPath);IEnumerable<XElement> elements = from element in xe.Elements("People")where element.Attribute("ID").Value == _strIDselect element;if (elements.Count() > 0)elements.First().Remove();xe.Save(_strPath);}GetXmlInfo();}/// <summary>/// 显示鼠标选中XML点的详细信息,并赋值给文本框/// 使用了XElement类的Load()方法/// </summary>private void DataGridView1_CellClick(object sender, DataGridViewCellEventArgs e){_strID = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString();XElement xe = XElement.Load(_strPath);IEnumerable<XElement> elements = from SelectedInfo in xe.Elements("People")where SelectedInfo.Attribute("ID").Value == _strIDselect SelectedInfo;foreach (XElement element in elements){textBox1.Text = element.Element("Name").Value;               textBox2.Text = element.Element("Salary").Value;comboBox1.SelectedItem = element.Element("Sex").Value;}}}
}

(2)生成效果

         原表和增加、修改、删除后的表

 

 

相关文章:

C#中LINQtoObjects、LINQtoDataSet和LINQtoXML

目录 一、使用LINQ操作数组和集合 二、使用LINQ操作DataSet数据集 1.AsEnumerable()方法 2.CopyToDataTable()方法 3.AsDataView()方法 4.Take()方法 5.Sum()方法 6.示例 &#xff08;1&#xff09;源码 &#xff08;2&#xff09;生成效果 三、使用LINQ操作XML 1.…...

k8s中 RBAC中,clusterrole,serviceaccount , rolebinding 是什么关系谁先谁后

在Kubernetes的RBAC&#xff08;Role-Based Access Control&#xff09;中&#xff0c;ClusterRole、ServiceAccount和RoleBinding是三个关键的组件&#xff0c;它们之间的关系如下&#xff1a; ClusterRole&#xff1a;ClusterRole 是一种全局的权限规则&#xff0c;它定义了一…...

什么是文件安全

文件安全就是通过实施严格的访问控制措施和完美的权限卫生来保护您的业务关键信息不被窥探&#xff0c;除了启用和监控安全访问控制外&#xff0c;整理数据存储在保护文件方面也起着重要作用。通过清除旧的、过时的和其他垃圾文件来定期优化文件存储&#xff0c;以专注于关键业…...

maven的settings.xml和pom.xml配置文件详解

一、配置文件 maven的配置文件主要有 settings.xml 和pom.xml 两个文件。 其中在maven安装目录下的settings.xml&#xff0c;如&#xff1a;D:\Program Files\apache-maven-3.6.3\conf\settings.xml 是全局配置文件 用户目录的.m2子目录下的settings.xml&#xff0c;如&#…...

YB2503HV 100V 3A SOP8内置MOS 高效率降压IC(昱灿)

YB2503HV 100V 3A SOP8内置MOS 高效率降压IC 描述&#xff1a; YB2503HV是单片集成可设定输出电流的开关型降压恒压驱动器&#xff0c;可工作在宽输入电压范围具有优良的负载和线性调整度。安全保护机制包括每周期的峰值限流、软启动、过压保护和温度保护。YB2503HV需要非常少…...

Redis安装Linux

1、下载安装包 wget http://download.redis.io/releases/redis-3.0.0.tar.gz 2、安装 mkdir /usr/local/redis cp redis-3.0.0.tar.gz /usr/local/redis cd /usr/local/redis tar -zxvf redis-3.0.0.tar.gz cd /usr/local/redis/redis-3.0.0 make PREFIX/usr/local/red…...

PCL点云处理(007)-Ransac

随机抽样一致性算法RANSAC(Random sample consensus)是一种迭代的方法来从一系列包含有离异值的数据中计算数学模型参数的方法。 RANSAC算法本质上由两步组成&#xff0c;不断进行循环&#xff1a; 从输入数据中随机选出能组成数学模型的最小数目的元素&#xff0c;使用这些元素…...

有方N58 HTTP POST 请求连接 TDengine

串口调试软件&#xff1a;格西调试精灵 第一步先注册网络获取IP地址 建立PPP连接 ATXIIC1\r PPP链路建立成功&#xff0c;查询IP地址 ATXIIC?\r 设置网络APN ATCREG?\r 运行结果&#xff0c;红线处是获…...

基于Python+Pygame实现一个滑雪小游戏

目录 项目介绍Pygame介绍项目文件夹介绍演示视频代码免费领取 一、项目介绍 使用介绍&#xff1a;运行main.py文件后&#xff0c;通过左右按键可以控制小人的移动&#xff0c;如果经过旗杆那么10分&#xff0c;如果碰到树木那么减50分。 二、Pygame介绍 Pygame是一个用于游…...

【限制输入框值类型】自定义指令el-input输入类型限制,vue和html两个版本

前言 经常遇到输入框需要限制只能输入数字的&#xff0c; 因为用户很离谱&#xff0c;明显输入数字的地方他非要输入英文或者中文 但是用到UI框架或者自己写方法验证表单比较麻烦 为了一个输入框专门去弄一个验证很麻烦 所以这里就整合了两种自定义指令的方式&#xff0c;更加…...

对一个金融风控测额公式的理解(1)

目录 公式&#xff1a;&#xff08;近3个月回款总额/过去3个月的FBA平均库存价值&#xff09;*最近FBA的库存价值*过去13周FBA发货比例 详细讨论一下这个&#xff1a;&#xff08;近3个月回款总额/过去3个月的FBA平均库存价值&#xff09; 既然&#xff08;近3个月回款总额/…...

【GEE】2、探索数据集

1简介 在本单元中&#xff0c;我们将讨论以下概念&#xff1a; Google 地球引擎中可用的潜在数据来源。 通过生态示例显示的数据集采样用例。 如何使用 Google 地球引擎访问重要的元数据。 2背景 要将遥感集成到您的研究和分析中&#xff0c;学习如何解析 Google 地球引擎上…...

开发一款直播弹幕游戏需要多少钱?

开发一款直播弹幕游戏需要多少钱&#xff1f;有好多朋友在咨询过弹幕游戏的开发价格后&#xff0c;都会比较吃惊&#xff0c;一款体量这么小的游戏为什么动辄就要几万块甚至十几万&#xff1f; 我来给你们说分析一下原因&#xff0c;这种游戏如果脱离开直播间&#xff0c;可以…...

STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出

1. 课程概述&#xff08;297.1&#xff09; 课程要求&#xff1a;C语言熟练&#xff0c;提前学完 C51 2. 开发软件Keil5的安装&#xff08;298.2&#xff09; 开发环境的安装 编程语言&#xff1a;C语言需要安装的软件有两个&#xff1a;Keil5 和 STM32CubeMX Keil5 的安装…...

selenium元素定位 —— 提高篇 CSS定位元素

CSS (Cascading Style Sheets) 是一种用于渲染 HTML 或者 XML 文档的语言&#xff0c;CSS 利用其选择器可以将样式属性绑定到文档中的指定元素。理论上说无论一个元素定位有多复杂都能够定位到元素。 因为不同的浏览器 XPath 引擎不同甚至没有自己的 Xpath 引擎&#xff0c;这…...

隔离和非隔离电源的区别

一、电源隔离与非隔离 电源的隔离与非隔离&#xff0c;主要是针对开关电源而言&#xff0c;业内比较通用的看法是&#xff1a; 1、隔离电源&#xff1a;电源的输入回路和输出回路之间没有直接的电气连接&#xff0c;输入和输出之间是绝缘的高阻态&#xff0c;没有电流回路。 …...

C语言自定义数据类型

一、构造数据类型 构造数据类型&#xff1a;用户自己建立的数据类型&#xff08;自定义数据类型&#xff09; C语言中的自定义数据类型有&#xff1a;数组类型、结构体类型、共用体类型和枚举类型。 1.1. 结构体 C语言允许用户根据需要自己建立的由不同类型数据组成的组合型…...

SoftwareTest5 - 你就只知道功能测试吗 ?

你就只知道功能测试吗 ? 一 . 按照测试对象划分1.1 文档测试1.2 可靠性测试1.3 容错性测试1.4 安装卸载测试1.5 内存泄漏测试1.6 弱网测试 二 . 按是否查看代码划分2.1 黑盒测试2.2 白盒测试2.3 灰盒测试 三 . 按照开发阶段划分3.1 单元测试3.2 集成测试3.3 冒烟测试3.4 系统测…...

Uniapp 中,能够同时兼容H5、web、app、微信小程序的引入高德地图的语法格式

在 Uniapp 中&#xff0c;可以通过使用 uni-app 统一的 API 来同时兼容 H5、web、App 和微信小程序&#xff0c;而引入高德地图则有以下两种语法格式供选择&#xff1a; 使用 Vue.js 的语法格式&#xff1a; <template><view><map :longitude"longitude&…...

基于nodejs+vue网上鲜花销售系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...