📅  最后修改于: 2023-12-03 15:17:19.962000             🧑  作者: Mango
LINQ是语言集成查询(Language Integrated Query)的简称,它为C#语言提供了一种简便的方式来处理数据,同时又不需要使用SQL语言。
首先需要了解一下LINQ的基础操作,共有以下几种:
用于筛选满足某个条件的数据项,返回形式为IEnumerable<TSource>
。
var list = new List<int> { 1, 2, 3, 4, 5 };
var result = list.Where(i => i % 2 == 0);
// 返回结果为2, 4
用于对数据进行转换,返回形式为IEnumerable<TResult>
。
var list = new List<int> { 1, 2, 3 };
var result = list.Select(i => i * 2);
// 返回结果为2, 4, 6
用于按照某种规则对数据进行排序,返回形式为IOrderedEnumerable<TSource>
。
var list = new List<int> { 2, 1, 3 };
var result = list.OrderBy(i => i);
// 返回结果为1, 2, 3
用于根据某个字段对数据进行分组,返回形式为IEnumerable<IGrouping<TKey, TSource>>
。
var list = new List<Student> {
new Student("Tom", "A"),
new Student("Jerry", "B"),
new Student("Marry", "B")
};
var result = list.GroupBy(s => s.ClassName);
// 返回结果为:
// 分组A
// Tom
//
// 分组B
// Jerry
// Marry
除了基础操作,LINQ还提供了一些高级操作,如聚合操作、连接操作、量词操作等。
聚合操作是对一组数据进行计算,最终返回一个值。
用于计算数据项的个数。
var list = new List<int> { 1, 2, 3, 4 };
var result = list.Count();
// 返回结果为4
用于计算数据项的和。
var list = new List<int> { 1, 2, 3, 4 };
var result = list.Sum();
// 返回结果为10
用于计算数据项的平均值。
var list = new List<int> { 1, 2, 3, 4 };
var result = list.Average();
// 返回结果为2.5
用于计算数据项的最大值。
var list = new List<int> { 1, 2, 3, 4 };
var result = list.Max();
// 返回结果为4
用于计算数据项的最小值。
var list = new List<int> { 1, 2, 3, 4 };
var result = list.Min();
// 返回结果为1
连接操作是将两个数据集合中的数据进行关联,最终返回一个新的集合。
用于在两个数据集合中根据共同的字段进行关联。
var students = new List<Student> {
new Student("Tom", 1),
new Student("Jerry", 2)
};
var scores = new List<Score> {
new Score(1, 90),
new Score(2, 80)
};
var result = students.Join(scores, s => s.Id, sc => sc.StudentId, (s, sc) =>
new {
Name = s.Name,
Score = sc.Score
}
);
// 返回结果为:
// Tom 90
// Jerry 80
用于在两个数据集合中根据共同的字段进行关联,但是一次性返回所有关联的结果。
var students = new List<Student> {
new Student("Tom", 1),
new Student("Jerry", 2)
};
var scores = new List<Score> {
new Score(1, 90),
new Score(2, 80),
new Score(2, 70)
};
var result = students.GroupJoin(scores, s => s.Id, sc => sc.StudentId, (s, scs) =>
new {
Name = s.Name,
Scores = scs.Select(sc => sc.Score)
}
);
// 返回结果为:
// Tom 90
// Jerry 80, 70
量词操作用于判断数据集合中的数据是否满足某个条件。
用于判断集合中是否有任意一个数据项满足条件。
var list = new List<int> { 1, 2, 3, 4 };
var result = list.Any(i => i == 3);
// 返回结果为True
用于判断集合中的所有数据项是否满足条件。
var list = new List<int> { 1, 2, 3, 4 };
var result = list.All(i => i > 0);
// 返回结果为True
以上就是LINQ的一些基础和高级操作,可以极大地简化C#中对数据的处理,提高程序员的工作效率。