📅  最后修改于: 2023-12-03 15:02:41.543000             🧑  作者: Mango
LINQ(Language Integrated Query)是微软.NET Framework的组成部分,是一种强类型的查询语言,用于从各种数据源中检索、排序、过滤和组合数据。LINQ主要使用对象、集合、数据库等,目的是将这些数据源统一起来作为数据源。在这些数据源中,我们可以使用各种LINQ运算符,其中过滤运算符是其中之一。过滤运算符主要包括Where、OfType、Skip、SkipWhile、Take和TakeWhile。本文将会围绕这些过滤运算符展开。
Where是用于筛选序列的方法,它通过Lambda表达式来筛选出符合条件的元素。下面是一个例子:
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0); // 过滤出偶数
foreach (var number in evenNumbers)
{
Console.WriteLine(number);
}
输出结果:
2
4
OfType是用于筛选指定类型的元素的方法,它筛选出序列中指定类型的元素并返回一个新的序列。下面是一个例子:
var animals = new object[] { "cat", 1, "dog", 2 };
var strings = animals.OfType<string>(); // 过滤出字符串
foreach (var animal in strings)
{
Console.WriteLine(animal);
}
输出结果:
cat
dog
Skip和Take是用于对序列进行分页操作的方法。
Skip表示跳过序列中指定数量的元素后返回剩余元素的新序列,Take表示取序列中指定数量的元素后返回的新序列。下面是一个例子:
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var skipNumbers = numbers.Skip(2); // 跳过前两个元素
foreach (var number in skipNumbers)
{
Console.WriteLine(number);
}
// 输出结果:3 4 5
var takeNumbers = numbers.Take(3); // 取前三个元素
foreach (var number in takeNumbers)
{
Console.WriteLine(number);
}
// 输出结果:1 2 3
SkipWhile和TakeWhile是与Skip和Take类似的方法,它们也是用于对序列进行分页操作的方法。只不过它们是通过Lambda表达式来筛选出符合条件的元素。
SkipWhile表示从序列的头开始逐个比较元素,直到第一个不符合条件的元素,然后返回已经过滤的元素的新序列;TakeWhile表示从序列的头开始逐个比较元素,直到第一个不符合条件的元素为止,返回已经过滤的元素的新序列。下面是一个例子:
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var skipWhileNumbers = numbers.SkipWhile(n => n < 3); // 跳过小于3的元素
foreach (var number in skipWhileNumbers)
{
Console.WriteLine(number);
}
// 输出结果:3 4 5
var takeWhileNumbers = numbers.TakeWhile(n => n < 3); // 取小于3的元素
foreach (var number in takeWhileNumbers)
{
Console.WriteLine(number);
}
// 输出结果:1 2
本文主要介绍了LINQ中的过滤运算符,包括Where、OfType、Skip、SkipWhile、Take和TakeWhile,它们都是从序列中筛选出符合条件的元素的方法。熟练掌握这些方法可以大大简化我们在开发中的查询操作,提高开发效率。