编辑
2025-02-04
C# 应用
00
请注意,本文编写于 91 天前,最后修改于 91 天前,其中某些信息可能已经过时。

目录

摘要
正文

摘要

在C#中,LINQ(Language Integrated Query)是一种强大的查询语言,它允许你以声明式的方式查询和操作数据。其中,SelectSelectMany是两个非常重要的操作符,它们在处理集合时非常有用。

正文

运算符描述C#查询表达式语法
Select操作转换函数的基础项目值select
SelectMany操作项目的值是根据上的转换函数,以及拼合成一个单一的序列的序列使用多个from子句

Select操作符用于将一个集合中的每个元素投影(转换)成一个新的形式。这意味着你可以使用Select来改变集合中元素的形状或提取元素的某些部分。Select通常用于执行一对一的转换。

SelectMany操作符用于将集合的集合(或者说是集合中的元素的集合)展平为一个集合。这意味着它可以将多对一或多对多的关系转换为一对一的关系。SelectMany非常适用于处理嵌套集合的场景。

一个例子

C#
private void btnSearch_Click(object sender, EventArgs e) { List<string> words=new List<string>() { "张飞", "关羽", "刘备", "刘封", "刘禅" }; var ret = from it in words select it.Substring(0, 1); foreach (var item in ret) { lstMain.Items.Add(item); } }

image.png

再来一个例子

C#
class Student { public int Score { get; set; } public string Name { get; set; } public Student(int score, string name) { this.Score = score; Name = name; } } class Teacher { public string Name { get; set; } public List<Student> Students; public Teacher(string order, List<Student> students) { this.Name = order; this.Students = students; } }

调用

C#
private void btnSearch_Click(object sender, EventArgs e) { List<Teacher> teachers = new List<Teacher> { new Teacher("a",new List<Student>{ new Student(100, "A"),new Student(90,"AA"),new Student(30, "1") }), new Teacher("b",new List<Student>{ new Student(100, "B"),new Student(90,"AB"),new Student(60, "2") }), new Teacher("c",new List<Student>{ new Student(26, "C"),new Student(90,"AC"),new Student(40, "3") }), new Teacher("d",new List<Student>{ new Student(100, "D"),new Student(90,"AD"),new Student(60, "4") }), new Teacher("e",new List<Student>{ new Student(100, "E"),new Student(90,"AE"),new Student(50, "5") }), new Teacher("f",new List<Student>{ new Student(100, "F"),new Student(90,"AF"),new Student(60, "6") }), new Teacher("g",new List<Student>{ new Student(100, "G"),new Student(90,"AG"),new Student(60, "7") }) }; var list1 = from t in teachers from s in t.Students where s.Score < 60 select s; foreach (var item in list1) { lstMain.Items.Add(item.Name+" "+item.Score.ToString()); } }

image.png

我们用SelectMany

C#
private void btnSearch_Click(object sender, EventArgs e) { List<Teacher> teachers = new List<Teacher> { new Teacher("a",new List<Student>{ new Student(100, "A"),new Student(90,"AA"),new Student(30, "1") }), new Teacher("b",new List<Student>{ new Student(100, "B"),new Student(90,"AB"),new Student(60, "2") }), new Teacher("c",new List<Student>{ new Student(26, "C"),new Student(90,"AC"),new Student(40, "3") }), new Teacher("d",new List<Student>{ new Student(100, "D"),new Student(90,"AD"),new Student(60, "4") }), new Teacher("e",new List<Student>{ new Student(100, "E"),new Student(90,"AE"),new Student(50, "5") }), new Teacher("f",new List<Student>{ new Student(100, "F"),new Student(90,"AF"),new Student(60, "6") }), new Teacher("g",new List<Student>{ new Student(100, "G"),new Student(90,"AG"),new Student(60, "7") }) }; var list1 = teachers.SelectMany(t => t.Students).Where(s => s.Score < 60); foreach (var item in list1) { lstMain.Items.Add(item.Name+" "+item.Score.ToString()); } }

本文作者:rick

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!