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.示例 (1)源码 (2)生成效果 三、使用LINQ操作XML 1.…...
k8s中 RBAC中,clusterrole,serviceaccount , rolebinding 是什么关系谁先谁后
在Kubernetes的RBAC(Role-Based Access Control)中,ClusterRole、ServiceAccount和RoleBinding是三个关键的组件,它们之间的关系如下: ClusterRole:ClusterRole 是一种全局的权限规则,它定义了一…...
什么是文件安全
文件安全就是通过实施严格的访问控制措施和完美的权限卫生来保护您的业务关键信息不被窥探,除了启用和监控安全访问控制外,整理数据存储在保护文件方面也起着重要作用。通过清除旧的、过时的和其他垃圾文件来定期优化文件存储,以专注于关键业…...
maven的settings.xml和pom.xml配置文件详解
一、配置文件 maven的配置文件主要有 settings.xml 和pom.xml 两个文件。 其中在maven安装目录下的settings.xml,如:D:\Program Files\apache-maven-3.6.3\conf\settings.xml 是全局配置文件 用户目录的.m2子目录下的settings.xml,如&#…...
YB2503HV 100V 3A SOP8内置MOS 高效率降压IC(昱灿)
YB2503HV 100V 3A SOP8内置MOS 高效率降压IC 描述: YB2503HV是单片集成可设定输出电流的开关型降压恒压驱动器,可工作在宽输入电压范围具有优良的负载和线性调整度。安全保护机制包括每周期的峰值限流、软启动、过压保护和温度保护。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算法本质上由两步组成,不断进行循环: 从输入数据中随机选出能组成数学模型的最小数目的元素,使用这些元素…...
有方N58 HTTP POST 请求连接 TDengine
串口调试软件:格西调试精灵 第一步先注册网络获取IP地址 建立PPP连接 ATXIIC1\r PPP链路建立成功,查询IP地址 ATXIIC?\r 设置网络APN ATCREG?\r 运行结果,红线处是获…...
基于Python+Pygame实现一个滑雪小游戏
目录 项目介绍Pygame介绍项目文件夹介绍演示视频代码免费领取 一、项目介绍 使用介绍:运行main.py文件后,通过左右按键可以控制小人的移动,如果经过旗杆那么10分,如果碰到树木那么减50分。 二、Pygame介绍 Pygame是一个用于游…...
【限制输入框值类型】自定义指令el-input输入类型限制,vue和html两个版本
前言 经常遇到输入框需要限制只能输入数字的, 因为用户很离谱,明显输入数字的地方他非要输入英文或者中文 但是用到UI框架或者自己写方法验证表单比较麻烦 为了一个输入框专门去弄一个验证很麻烦 所以这里就整合了两种自定义指令的方式,更加…...
对一个金融风控测额公式的理解(1)
目录 公式:(近3个月回款总额/过去3个月的FBA平均库存价值)*最近FBA的库存价值*过去13周FBA发货比例 详细讨论一下这个:(近3个月回款总额/过去3个月的FBA平均库存价值) 既然(近3个月回款总额/…...
【GEE】2、探索数据集
1简介 在本单元中,我们将讨论以下概念: Google 地球引擎中可用的潜在数据来源。 通过生态示例显示的数据集采样用例。 如何使用 Google 地球引擎访问重要的元数据。 2背景 要将遥感集成到您的研究和分析中,学习如何解析 Google 地球引擎上…...
开发一款直播弹幕游戏需要多少钱?
开发一款直播弹幕游戏需要多少钱?有好多朋友在咨询过弹幕游戏的开发价格后,都会比较吃惊,一款体量这么小的游戏为什么动辄就要几万块甚至十几万? 我来给你们说分析一下原因,这种游戏如果脱离开直播间,可以…...
STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出
1. 课程概述(297.1) 课程要求:C语言熟练,提前学完 C51 2. 开发软件Keil5的安装(298.2) 开发环境的安装 编程语言:C语言需要安装的软件有两个:Keil5 和 STM32CubeMX Keil5 的安装…...
selenium元素定位 —— 提高篇 CSS定位元素
CSS (Cascading Style Sheets) 是一种用于渲染 HTML 或者 XML 文档的语言,CSS 利用其选择器可以将样式属性绑定到文档中的指定元素。理论上说无论一个元素定位有多复杂都能够定位到元素。 因为不同的浏览器 XPath 引擎不同甚至没有自己的 Xpath 引擎,这…...
隔离和非隔离电源的区别
一、电源隔离与非隔离 电源的隔离与非隔离,主要是针对开关电源而言,业内比较通用的看法是: 1、隔离电源:电源的输入回路和输出回路之间没有直接的电气连接,输入和输出之间是绝缘的高阻态,没有电流回路。 …...
C语言自定义数据类型
一、构造数据类型 构造数据类型:用户自己建立的数据类型(自定义数据类型) C语言中的自定义数据类型有:数组类型、结构体类型、共用体类型和枚举类型。 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 中,可以通过使用 uni-app 统一的 API 来同时兼容 H5、web、App 和微信小程序,而引入高德地图则有以下两种语法格式供选择: 使用 Vue.js 的语法格式: <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技术可行性:…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
window 显示驱动开发-如何查询视频处理功能(三)
D3DDDICAPS_GETPROCAMPRANGE请求类型 UMD 返回指向 DXVADDI_VALUERANGE 结构的指针,该结构包含特定视频流上特定 ProcAmp 控件属性允许的值范围。 Direct3D 运行时在D3DDDIARG_GETCAPS的 pInfo 成员指向的变量中为特定视频流的 ProcAmp 控件属性指定DXVADDI_QUER…...
