unity C# 中通俗易懂LINQ使用案例

文章目录

    • 1. 从数组或列表中查询元素**:
    • 2. **排序与分组**:
    • 3. **连接多个数据源**:
    • 4. **聚合操作**:
    • 5. **分页查询**:
    • 6. **多条件查询**:
    • 7. **转换和投影(Select)**:
    • 8. **聚合函数(GroupBy 和 Aggregate)**:
    • 9. **组合查询(Concat)**:
    • 10. **Distinct 查询**:
    • 11. **元素存在性检查(Any 和 All)**:
    • 12. **Join 多个数据源**:

C# 中的 LINQ语句可以使得我们使用简短的代码就可以完成排序、分类、查询等常用功能。以下是一些基本的 C# LINQ 使用案例:

1. 从数组或列表中查询元素**:

假设我们有一个整数数组,想要找出所有的偶数。

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2 };var evenNumbers = numbers.Where(n => n % 2 == 0);foreach (var number in evenNumbers)
{Console.WriteLine(number);
}

上述代码使用 Where 方法过滤出所有偶数。

2. 排序与分组

如果我们有一个学生类 Student 包含 NameGrade 属性,并且有一个学生列表,我们可以按年级排序并分组。

class Student
{public string Name { get; set; }public int Grade { get; set; }
}List<Student> students = new List<Student>
{new Student { Name = "Alice", Grade = 9 },new Student { Name = "Bob", Grade = 10 },// 更多学生...
};var sortedStudents = students.OrderBy(s => s.Grade);
var groupedStudents = students.GroupBy(s => s.Grade);// 输出每个年级的学生
foreach (var group in groupedStudents)
{Console.WriteLine($"Grade: {group.Key}");foreach (var student in group){Console.WriteLine($"\t{Name}:");}
}

3. 连接多个数据源

这是一个复合查询的例子,假设我们有两个数据源:一个包含学生信息的列表和另一个包含课程成绩的列表,它们通过学生ID关联。

class Student
{public int ID { get; set; }public string Name { get; set; }
}class Grade
{public int StudentID { get; set; }public string Course { get; set; }public double Score { get; set; }
}List<Student> students = new List<Student>();
List<Grade> grades = new List<Grade>();// 填充数据...var studentGrades = from student in studentsjoin grade in grades on student.ID equals grade.StudentIDselect new { student.Name, grade.Course, grade.Score };foreach (var item in studentGrades)
{Console.WriteLine($"{item.Name}{item.Course} 的成绩是 {item.Score}");
}

4. 聚合操作

计算列表中的总和、平均值、最大值或最小值。

var sum = numbers.Sum();
var average = numbers.Average();
var max = numbers.Max();
var min = numbers.Min();Console.WriteLine($"Sum: {sum}, Average: {average}, Max: {max}, Min: {min}");

5. 分页查询

假设我们有一个大型的用户列表,并希望分页显示。

class User
{public int Id { get; set; }public string Name { get; set; }// 更多属性...
}List<User> users = new List<User>(); // 假设有大量用户数据int pageSize = 10;
int currentPage = 2;var paginatedUsers = users.Skip((currentPage - 1) * pageSize).Take(pageSize);foreach (var user in paginatedUsers)
{Console.WriteLine($"{user.Id}: {user.Name}");
}

6. 多条件查询

对于一个包含产品信息的列表,我们可以根据多个条件进行筛选。

class Product
{public string Name { get; set; }public decimal Price { get; set; }public bool IsAvailable { get; set; }
}List<Product> products = new List<Product>();var filteredProducts = products.Where(p => p.IsAvailable && p.Price > 100m && p.Name.Contains("Smartphone")).OrderByDescending(p => p.Price);foreach (var product in filteredProducts)
{Console.WriteLine($"{product.Name} - ${product.Price}");
}

7. 转换和投影(Select)

只选择或转换对象中的某些属性。

class Person
{public string FirstName { get; set; }public string LastName { get; set; }public int Age { get; set; }
}List<Person> people = new List<Person>();var personNames = people.Select(p => $"{p.FirstName} {p.LastName}");foreach (var name in personNames)
{Console.WriteLine(name);
}

8. 聚合函数(GroupBy 和 Aggregate)

计算每个类别(如按年龄分组)的数量,或者对一组值应用累计计算。

var ageGroups = people.GroupBy(p => p.Age).Select(g => new { Age = g.Key, Count = g.Count() });foreach (var group in ageGroups)
{Console.WriteLine($"Age: {group.Age}, Count: {group.Count}");
}double totalAge = people.Sum(p => p.Age);
Console.WriteLine($"Total age of all people: {totalAge}");int oldestPersonAge = people.Aggregate((currentMax, next) => currentMax.Age > next.Age ? currentMax : next).Age;
Console.WriteLine($"Oldest person's age: {oldestPersonAge}");

9. 组合查询(Concat)

将两个数据源合并为一个。

List<int> numbers1 = new List<int> { 1, 2, 3 };
List<int> numbers2 = new List<int> { 4, 5, 6 };var combinedNumbers = numbers1.Concat(numbers2);foreach (var number in combinedNumbers)
{Console.WriteLine(number);
}

10. Distinct 查询

删除重复项,返回唯一值的序列。```csharp
List<string> words = new List<string> { "apple", "banana", "apple", "orange", "banana" };var uniqueWords = words.Distinct();foreach (var word in uniqueWords)
{Console.WriteLine(word);
}
```

11. 元素存在性检查(Any 和 All)

检查集合中是否存在满足条件的任何元素或所有元素都满足条件。```csharp
bool hasEvenNumber = numbers.Any(n => n % 2 == 0);
Console.WriteLine($"是否有偶数:{hasEvenNumber}");bool allNumbersGreaterThanZero = numbers.All(n => n > 0);
Console.WriteLine($"是否所有数字都大于零:{allNumbersGreaterThanZero}");
```

12. Join 多个数据源

假设我们有两个不同类型的列表,通过某个公共属性关联它们。```csharp
class Order
{public int CustomerId { get; set; }public decimal TotalPrice { get; set; }
}class Customer
{public int Id { get; set; }public string Name { get; set; }
}List<Order> orders = new List<Order>();
List<Customer> customers = new List<Customer>();var customerOrders = from order in ordersjoin customer in customers on order.CustomerId equals customer.Idselect new { CustomerName = customer.Name, OrderTotal = order.TotalPrice };foreach (var item in customerOrders)
{Console.WriteLine($"{item.CustomerName} 的订单总价是 ${item.OrderTotal}");
}
```

以上就是更多关于C# LINQ使用的案例,实际上LINQ的功能远不止这些,它能极大地简化和优化对各种数据源的操作。

python学习汇总连接:
50个开发必备的Python经典脚本(1-10)

50个开发必备的Python经典脚本(11-20)

50个开发必备的Python经典脚本(21-30)

50个开发必备的Python经典脚本(31-40)

50个开发必备的Python经典脚本(41-50)
————————————————

​最后我们放松一下眼睛
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/229559.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javascript 常见工具函数(四)

31.RGB值和十六进制值之间的转换&#xff1a; &#xff08;1&#xff09;十六进制的颜色转为 RGB格式&#xff1a; /*16进制颜色转为RGB格式*/String.prototype.colorRgb function () {var sColor this.toLowerCase();if (sColor && reg.test(sColor)) {if (sColor.l…

车载 Android之 核心服务 - CarPropertyService 解析

重要类的源码文件名及位置&#xff1a; CarPropertyManager.java packages/services/Car/car-lib/src/android/car/hardware/property/ CarPropertyService.java packages/services/Car/service/src/com/android/car/ 类的介绍&#xff1a; CarPropertyManager&#xff1a…

【BERT】深入BERT模型2——模型中的重点内容,两个任务

前言 BERT出自论文&#xff1a;《BERT&#xff1a;Pre-training of Deep Bidirectional Transformers for Language Understanding》 2019年 近年来&#xff0c;在自然语言处理领域&#xff0c;BERT模型受到了极为广泛的关注&#xff0c;很多模型中都用到了BERT-base或者是BE…

计算机网络实验(六):三层交换机实现VLAN间路由

一、实验名称:三层交换机实现VLAN间路由 二、实验原理 2.1. VLAN基本配置 在交换网络中,为了实现对物理网络的逻辑划分,引入了VLAN(虚拟局域网)的概念。VLAN通过将不同的设备划分到不同的虚拟网络中,实现了逻辑隔离。基本配置包括在交换机上创建VLAN、将端口划分到相应…

深度学习MLP_实战演练使用感知机用于感情识别_keras

目录 &#xff08;1&#xff09;why deep learning is game changing?&#xff08;2&#xff09;it all started with a neuron&#xff08;3&#xff09;Perceptron&#xff08;4&#xff09;Perceptron for Binary Classification&#xff08;5&#xff09;put it all toget…

初识Linux下进程

&#x1f30e;初识进程 初识进程 简单认识一下进程 如何管理进程 进程属性信息 内核运行队列 查看进程 通过系统调用获取进程标识符       父子进程       查看运行中的进程 总结 前言&#xff1a; 我们在电脑上点开的一个个应用&#xff0c;其实就是一个个进程&am…

CMake支持的编译平台和IDE

文章目录 简介支持的IDEVisual Studio支持示例 其他编译器和生成器支持MinGW示例 IDE集成Eclipse示例 实验性和特殊平台支持总结 简介 CMake是一个非常强大的跨平台自动化构建工具&#xff0c;它支持生成多种类型的项目文件&#xff0c;覆盖了广泛的开发环境和编译器。在这篇博…

【Java】SpringBoot整合xxl-job学习使用详解

文章目录 介绍作用如何使用下载项目中央仓库地址环境调度中心初始化“调度数据库”配置部署“调度中心”部署项目调度中心集群&#xff08;可选&#xff09;其他&#xff1a;Docker 镜像方式搭建调度中心配置部署“执行器项目” 执行器maven依赖执行器配置执行器组件配置执行器…

天津Java入门培训班 如何选择Java机构?

作为最受欢迎的编程语言&#xff0c;Java简直是IT领域的敲门砖&#xff0c;只要精通Java语言&#xff0c;找到好工作&#xff0c;进入大企业又多了一层保障。很多人都向往Java编程的广阔就业前景&#xff0c;却苦于不懂Java编程知识&#xff0c;一直在自学和参加培训中纠结。 …

设计模式:简单工厂模式、工厂方法模式、抽象工厂模式

简单工厂模式、工厂方法模式、抽象工厂模式 1. 为什么需要工厂模式&#xff1f;2. 简单工厂模式2.1. 定义2.2. 代码实现2.3. 优点2.4. 缺点2.5. 适用场景 3. 工厂方法模式3.1. 有了简单工厂模式为什么还需要有工厂方法模式&#xff1f;3.2. 定义3.3. 代码实现3.4. 主要优点3.5.…

LinkedList与ArrayList的比较

1.LinkedList 基于双向链表&#xff0c;无需连续内存 随机访问慢&#xff08;要沿着链表遍历&#xff09; 头尾插入删除性能高 占用内存多 2.ArrayList 基于数组&#xff0c;需要连续内存 随机访问快&#xff08;指根据下标访问&#xff09; 尾部插入、删除性能可以&…

挑战 ChatGPT 和 Google Bard 的防御

到目前为止&#xff0c;科学家已经创建了基于人工智能的聊天机器人&#xff0c;可以帮助内容生成。我们还看到人工智能被用来创建像 WormGPT 这样的恶意软件&#xff0c;尽管地下社区对此并不满意。但现在正在创建聊天机器人&#xff0c;可以使用生成人工智能通过即时注入活动来…

Android Matrix剪切clipPath缩放scale图片postTranslate圆形放大镜,Kotlin(1)

Android Matrix剪切clipPath缩放scale图片postTranslate圆形放大镜&#xff0c;Kotlin&#xff08;1&#xff09; 实现查看图片的放大镜&#xff0c;放大镜随着手指在屏幕上的移动&#xff0c;放大镜里面展示手指触点为中心、半径长度的圆形放大后的图片。 剪切出一块圆形Path…

K8S集群部署MySql

挂载MySQL数据卷 在k8s集群中挂载MySQL数据卷 需要安装一个NFS。 在主节点安装NFS yum install -y nfs-utils rpcbind 在主节点创建目录 mkdir -p /nfs chmod 777 /nfs 更改归属组与用户 chown -R nfsnobody:nfsnobody /nfs 配置共享目录 echo "/nfs *(insecure,rw,s…

大数据平台Bug Bash大扫除最佳实践

一、背景 随着越来越多的"新人"在日常工作以及大促备战中担当大任&#xff0c;我们发现仅了解自身系统业务已不能满足日常系统开发运维需求。为此&#xff0c;大数据平台部门组织了一次Bug Bash活动&#xff0c;既能提升自己对兄弟产品的理解和使用&#xff0c;又能…

【已解决】打印PDF文件,如何跳过不需要的页面?

打印PDF文件的时候&#xff0c;有时候我们只需要打印其中的几页&#xff0c;并不需要全部打印&#xff0c;那如何在打印时跳过那些不需要的页面呢&#xff1f;不清楚的小伙伴一起来看看吧&#xff01; 如果你是通过网页打开PDF文件&#xff0c;那么可以在页面中找到并点击“打…

k8s的声明式资源管理

在k8s当中支持两种声明资源的方式&#xff1a; 1、 yaml格式&#xff1a;主要用于和管理资源对象 2、 json格式&#xff1a;主要用于在API接口之间进行消息传递 声明式管理方法(yaml)文件 1、 适合对资源的修改操作 2、 声明式管理依赖于yaml文件&#xff0c;所有的内容都…

内存管理机制

内存管理机制与内存映射相关。 一、C与C 之所以将C与C放在一起是因为C是C的超集&#xff1b; 但是C是面向过程语言&#xff0c;C是面向对象的语言&#xff1b; C与C都可以使用malloc、calloc、realloc来申请内存空间&#xff1b; 其中void* malloc(size_t size)是在内存的动态…

2023年度回顾:怿星科技的转型与创新

岁月不居&#xff0c;时节如流。随着2023年的落幕&#xff0c;怿星科技在这一年中不仅实现了自身的转型&#xff0c;还在技术创新、产品研发、行业合作和人才培养等方面取得了显著的成就。这一年&#xff0c;怿星科技正式完成了从服务型公司向产品型公司的战略转变&#xff0c;…

软件测试方法分类-按照开发阶段划分细讲

前面我给出了整体的软件测试分类&#xff0c;那么接下来&#xff0c;我会将每个分类进行细讲。 第一个我们要说到的就是按照开发阶段划分。 我们都知道软件测试方法分类中&#xff0c;如果按照开发阶段划分&#xff0c;可以分为&#xff1a; 1&#xff0c;单元测试 (Unit Te…