linq和lambda

发布时间 2023-12-18 10:53:47作者: 高小浩upup

LINQ:

LINQ(Language Integrated Query)是.NET Framework 3.5 中引入的一个功能,它提供了一种统一的查询语法,使得我们可以在 C# 代码中直接使用类似 SQL 的查询语句来查询和操作各种数据源,如集合、数据库、XML 等。LINQ 使用标准查询运算符(如 WhereSelectOrderBy 等)来完成查询任务,这些运算符都是通用的,可以用于任何支持 IQueryable 或 IEnumerable 接口的数据源。LINQ 查询语句在编译时会被翻译成表达式树,这使得我们可以在运行时对查询进行动态修改。

下面是一个使用 LINQ 查询语句的示例代码:

var numbers = new List<int> { 1, 2, 3, 4, 5 };

var evenNumbers = from num in numbers
                  where num % 2 == 0
                  select num;

foreach (var num in evenNumbers)
{
    Console.WriteLine(num);
}

在上面的代码中,我们首先创建了一个整数列表,并初始化了一些数字。然后我们使用 LINQ 查询语句从该列表中筛选出所有偶数,并将结果保存到变量 evenNumbers 中。最后,我们使用 foreach 循环遍历整个结果,并将每个偶数打印出来。

上面的 LINQ 查询语句可以分解为以下几个部分:

  • from num in numbers: 这条语句引入了一个范围变量 num,并将其绑定到 numbers 列表中的每个元素。这个范围变量可以在查询语句中使用。
  • where num % 2 == 0: 这条语句用于筛选出所有满足条件 num % 2 == 0 的元素。也就是说,它只保留列表中的偶数。
  • select num: 这条语句用于指定查询结果的形式。在这里,我们只需要返回列表中的每个偶数本身,因此直接使用了范围变量 num 作为结果。

Lambda 表达式

Lambda 表达式是 C# 3.0 中引入的一个新特性,它提供了一种简洁的语法来定义匿名方法。Lambda 表达式由参数列表、箭头符号和表达式主体组成,其中参数列表可以省略类型信息。Lambda 表达式可以被赋值给委托类型的变量或作为实参传递给某些方法,从而允许我们编写更加灵活和简洁的代码。

下面是一个使用 Lambda 表达式的示例代码:

var numbers = new List<int> { 1, 2, 3, 4, 5 };

var evenNumbers = numbers.Where(num => num % 2 == 0);

foreach (var num in evenNumbers)
{
    Console.WriteLine(num);
}

在上面的代码中,我们首先创建了一个整数列表,并初始化了一些数字。然后我们使用 Where 扩展方法从该列表中筛选出所有偶数,并将结果保存到变量 evenNumbers 中。最后,我们使用 foreach 循环遍历整个结果,并将每个偶数打印出来。

上面的 Lambda 表达式可以分解为以下几个部分:

  • num => num % 2 == 0: 这条语句定义了一个匿名函数,它接受一个整数类型的参数 num,并返回一个布尔类型的值,表示该数是否为偶数。箭头符号 => 表示“转换为”或“变成”,将左侧的参数列表和右侧的表达式主体连接起来。
  • numbers.Where(...): 这条语句调用了 Where 扩展方法,该方法接受一个表示筛选条件的委托,并返回一个新的序列,其中只包含满足条件的元素。在这里,我们使用了刚刚定义的匿名函数作为筛选条件。

总结

综上所述,LINQ 和 Lambda 表达式都是 C# 中非常强大的特性,它们可以帮助我们编写更加简洁、灵活和高效的代码。通过熟练掌握 LINQ 和 Lambda 表达式,我们可以大大提高编程效率和代码质量。