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)

目录
相关文章
|
2月前
|
开发框架 .NET C#
C#学习相关系列之Linq用法---where和select用法(二)
C#学习相关系列之Linq用法---where和select用法(二)
|
11天前
|
SQL 前端开发 数据库连接
C# Lable增删改查
C# Lable增删改查
22 0
|
2月前
|
存储 SQL C#
C# 读取二维数组集合输出到Word预设表格
C# 读取二维数组集合输出到Word预设表格
|
2月前
|
存储 安全 C#
C#使用集合组织相关数据
C#使用集合组织相关数据
12 0
|
2月前
|
开发框架 .NET C#
C#学习相关系列之Linq用法---group和join相关用法(三)
C#学习相关系列之Linq用法---group和join相关用法(三)
|
2月前
|
开发框架 .NET C#
C#学习相关系列之Linq常用方法---排序(一)
C#学习相关系列之Linq常用方法---排序(一)
|
2月前
|
存储 安全 Java
34.C#:listT泛型集合
34.C#:listT泛型集合
18 1
|
2月前
|
存储 C#
33.c#:hashtable集合
33.c#:hashtable集合
16 1
|
2月前
|
存储 安全 Java
32.C#:ArrayList集合
32.C#:ArrayList集合
16 1
|
2月前
|
开发框架 安全 .NET
C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!
<h2>集合、异常、泛型、LINQ、委托、EF! #### 1. IList 接口与 List 的区别是什么? IList 接口和 List 类是C#中集合的两个相关但不同的概念。下面是它们的主要区别: <b>IList 接口</b> IList 接口是C#中定义的一个泛型接口,位于 System.Collections 命名空间。它派生自 ICollection 接口,定义了一个可以通过索引访问的有序集合。 ```c# IList 接口包含一系列索引化的属性和方法,允许按索引访问、插入、移除元素等。 由于是接口,它只定义了成员的契约,而不提供具体的实现。类似于 IEnumera
159 2