📜  LINQ |过滤运算符|类型(1)

📅  最后修改于: 2023-12-03 15:02:41.543000             🧑  作者: Mango

LINQ | 过滤运算符 | 类型

简介

LINQ(Language Integrated Query)是微软.NET Framework的组成部分,是一种强类型的查询语言,用于从各种数据源中检索、排序、过滤和组合数据。LINQ主要使用对象、集合、数据库等,目的是将这些数据源统一起来作为数据源。在这些数据源中,我们可以使用各种LINQ运算符,其中过滤运算符是其中之一。过滤运算符主要包括Where、OfType、Skip、SkipWhile、Take和TakeWhile。本文将会围绕这些过滤运算符展开。

Where

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

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是用于对序列进行分页操作的方法。

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

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,它们都是从序列中筛选出符合条件的元素的方法。熟练掌握这些方法可以大大简化我们在开发中的查询操作,提高开发效率。