在C#中,LINQ(Language Integrated Query)是一种强大的查询语言,它允许你以声明式的方式查询和操作数据。其中,Select
和SelectMany
是两个非常重要的操作符,它们在处理集合时非常有用。
运算符 | 描述 | 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);
}
}
再来一个例子
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());
}
}
我们用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 许可协议。转载请注明出处!