C#进阶-LINQ实现对集合的增删改查

简介: 本篇演示了LINQ在日常开发中的常用操作,实现结果集的增删改查。目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。

前面的章节细致介绍了LINQ扩展包的具体方法使用,本篇则是演示LINQ在日常开发中的常用操作,实现结果集的增删改查。目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。

对集合的增删改查

Linq是对集合进行操作,这里列举对集合增删改查的常用方法。在学习之前,我们要做一些准备工作,我们需要创建User对象和包含User对象的集合,创建Salary对象和包含Salary对象的集合,作为后面查询和输出的数据源,参见这篇文章C#进阶之LINQ表达式总结完成准备工作。

数据源1:

数据源2:


一、新增集合内对象

/* 新增一个任意属性的用户到集合 *//* C#版本1 */UseruserAdd=newUser() {
id=11,
name="Liu Mingxiu",
age=22,
gender=false,
occupation="Doctor"};
list.Add(userAdd);
/* C#版本2(支持一次添加多个) */IEnumerable<User>userAddList=newList<User>().Append(userAdd);
list.AddRange(userAddList);
/* 输出结果 */{id=1, name=ZhangLong, age=38, gender=True, occupation=Teacher}, 
{id=2, name=ZhangJin, age=18, gender=False, occupation=Student}, 
{id=3, name=ZhangShuai, age=38, gender=False, occupation=Teacher}, 
{id=4, name=LiuGuangzhi, age=38, gender=False, occupation=Doctor}, 
{id=5, name=LiuZiming, age=38, gender=True, occupation=Doctor}, 
{id=6, name=LiuShuai, age=29, gender=False, occupation=Doctor}, 
{id=7, name=LiuJin, age=21, gender=True, occupation=Builder}, 
{id=8, name=JiangLong, age=38, gender=True, occupation=Builder}, 
{id=9, name=HuZiming, age=21, gender=True, occupation=Student}, 
{id=10, name=HuJin, age=21, gender=False, occupation=Student}, 
{id=11, name=LiuMingxiu, age=22, gender=False, occupation=Doctor}

二、更新集合内的指定对象属性

/* 修改集合内所有医生的工资为10000且在职 *//* C#版本1 使用ForEach方法 */salaryList.Where(item=>item.occupation=="Doctor").ToList()
                .ForEach(u=> { u.salary=10000; u.active=true; });
/* C#版本2 使用All方法(需要返回true) */salaryList.Where(item=>item.occupation=="Doctor").ToList()
                .All( u=> { u.salary=10000; u.active=true; returntrue; });
/* 输出结果 */{id=1, name=ZhangLong, occupation=Teacher, active=True, salary=7800}
{id=2, name=ZhangJin, occupation=Student, active=True, salary=1500}
{id=3, name=ZhangShuai, occupation=Teacher, active=False, salary=8800}
{id=4, name=LiuGuangzhi, occupation=Doctor, active=True, salary=10000}
{id=5, name=LiuZiming, occupation=Doctor, active=True, salary=10000}
{id=6, name=LiuShuai, occupation=Doctor, active=True, salary=10000}
{id=7, name=LiuJin, occupation=Builder, active=True, salary=7000}
{id=8, name=JiangLong, occupation=Builder, active=False, salary=8500}
{id=9, name=HuZiming, occupation=Student, active=True, salary=2100}
{id=10, name=HuJin, occupation=Student, active=True, salary=1300}

三、删除集合内指定对象

/* 删除集合内所有职业为医生的用户对象 *//* 推荐使用RemoveAll方法批量删除 *//* C#版本1 */list.RemoveAll(item=>item.occupation=="Doctor");
/* 也可以使用Remove方法单个删除 *//* C#版本2 */List<User>maps=list.Where(item=>item.occupation=="Doctor").ToList();
foreach (UseruserDeleteinmaps){
list.Remove(userDelete);
}
/* C#版本3 */List<User>maps= (fromuinlistwhereu.occupation=="Doctor"selectu).ToList();
foreach (UseruserDeleteinmaps){
list.Remove(userDelete);
}
/* 输出结果 */{id=1, name=ZhangLong, age=38, gender=True, occupation=Teacher}, 
{id=2, name=ZhangJin, age=18, gender=False, occupation=Student}, 
{id=3, name=ZhangShuai, age=38, gender=False, occupation=Teacher}, 
{id=7, name=LiuJin, age=21, gender=True, occupation=Builder}, 
{id=8, name=JiangLong, age=38, gender=True, occupation=Builder}, 
{id=9, name=HuZiming, age=21, gender=True, occupation=Student}, 
{id=10, name=HuJin, age=21, gender=False, occupation=Student}


四、查询集合内的对象

基础查询参考:C#进阶-LINQ表达式基础语法ⅠC#进阶-LINQ表达式基础语法Ⅱ

多表查询参考:多表查询 Ⅰ(交集、并集、差集、去重)多表查询 Ⅱ(Join连接查询)

分组查询参考:分组查询 (GroupBy)

目录
相关文章
|
1月前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
3月前
|
存储 C# 索引
C# 一分钟浅谈:数组与集合类的基本操作
【9月更文挑战第1天】本文详细介绍了C#中数组和集合类的基本操作,包括创建、访问、遍历及常见问题的解决方法。数组适用于固定长度的数据存储,而集合类如`List<T>`则提供了动态扩展的能力。文章通过示例代码展示了如何处理索引越界、数组长度不可变及集合容量不足等问题,并提供了解决方案。掌握这些基础知识可使程序更加高效和清晰。
86 2
|
2月前
|
开发框架 NoSQL MongoDB
C#/.NET/.NET Core开发实战教程集合
C#/.NET/.NET Core开发实战教程集合
|
3月前
|
SQL 开发框架 安全
并发集合与任务并行库:C#中的高效编程实践
在现代软件开发中,多核处理器普及使多线程编程成为提升性能的关键。然而,传统同步模型在高并发下易引发死锁等问题。为此,.NET Framework引入了任务并行库(TPL)和并发集合,简化并发编程并增强代码可维护性。并发集合允许多线程安全访问,如`ConcurrentQueue&lt;T&gt;`和`ConcurrentDictionary&lt;TKey, TValue&gt;`,有效避免数据不一致。TPL则通过`Task`类实现异步操作,提高开发效率。正确使用这些工具可显著提升程序性能,但也需注意任务取消和异常处理等常见问题。
56 1
|
3月前
|
开发框架 自然语言处理 .NET
C#一分钟浅谈:LINQ 查询表达式的使用技巧
【9月更文挑战第6天】LINQ(Language Integrated Query)是C#开发中的强大工具,使查询数据集合变得简单且接近自然语言。本文从基础入手,通过具体示例讲解LINQ查询表达式的使用技巧,包括过滤、排序和分组等操作。同时,文章还探讨了常见问题及解决方法,如性能优化、过早枚举和类型转换等,帮助开发者写出更高效、易维护的代码。
103 15
|
7月前
|
开发框架 .NET C#
C#学习相关系列之Linq用法---where和select用法(二)
C#学习相关系列之Linq用法---where和select用法(二)
440 2
|
4月前
|
关系型数据库 MySQL 大数据
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
282 2
|
4月前
|
存储 C# 索引
C# 集合语法全解
C# 集合语法全解
35 0
|
6月前
|
开发框架 .NET 程序员
掌握C#语言的精髓:基础知识与实用技能详解(数据类型与变量+ 条件与循环+函数与模块+LINQ+异常+OOP)
掌握C#语言的精髓:基础知识与实用技能详解(数据类型与变量+ 条件与循环+函数与模块+LINQ+异常+OOP)
34 0
|
7月前
|
SQL 开发框架 .NET
C#linq表达式的应用
C#linq表达式的应用
41 0