在本文中,我们展示了如何使用LINQ的Select方法和select子句将元素映射到表达式。
语言集成查询(LINQ)是一种特定领域的语言,用于从各种数据源(包括数组、列表、XML文件或数据库)查询数据。
select
子句或Select
方法将序列的每个元素投射到一个新的形式中。它选择、投影和转换集合中的元素。Select在其他语言中通常称为Map。
Enumerable.Select
方法将选择器函数作为参数。选择器是一个应用于每个源元素的转换函数。
C#LINQSelect简单示例
第一个示例是一个使用LINQSelect的简单程序。
var vals = new List<int> { 1, 2, 3, 4, 5, 6 }; var res = vals.Select(e => e * 2); Console.WriteLine(string.Join(',', res));
程序定义了一个整数列表。所有元素都乘以二。
var res = vals.Select(e => e * 2);
Select
方法将给定的lambda表达式应用于每个元素。它返回由选择器函数修改的一系列值。
$ dotnet run 2,4,6,8,10,12
C#LINQ函数选择器
Func
是一个内置的通用委托类型。它可以与方法、匿名方法或lambda表达式一起使用。
var vals = new List<int> { 1, 2, 3, 4, 5, 6 }; Func<int, int> byfive = (e) => e * 5; var res = vals.Select(byfive); Console.WriteLine(string.Join(',', res));
程序将Func
委托应用于列表的元素。
$ dotnet run 5,10,15,20,25,30
C#LINQ选择子句
查询表达式是另一种LINQ语法。在查询表达式中,我们使用select
子句。
var words = new List<string> { "sky", "cup", "loud", "war", "water" }; var res = from word in words select word.Length; Console.WriteLine(string.Join(',', res));
在程序中,我们将单词列表转换为单词长度序列。
$ dotnet run 3,3,4,3,5
带索引的C#LINQ选择器
我们可以将元素的索引传递给选择器函数。
var words = new List<string> { "sky", "cup", "loud", "war", "water" }; var res = words.Select((e, idx) => new { idx, len = e.Length }); foreach (var e in res) { Console.WriteLine($"{e}"); }
在程序中,生成的对象还包括元素的索引。
$ dotnet run { idx = 0, len = 3 } { idx = 1, len = 3 } { idx = 2, len = 4 } { idx = 3, len = 3 } { idx = 4, len = 5 }
C#LINQ选择投影
select
子句也执行投影。投影是从返回的对象中选择特定字段。
var users = new List<User> { new ("John", "Doe", 1230), new ("Lucy", "Novak", 670), new ("Ben", "Walter", 2050), new ("Robin", "Brown", 2300), new ("Amy", "Doe", 1250), new ("Joe", "Draker", 1190), new ("Janet", "Doe", 980), new ("Albert", "Novak", 1930), }; var res = from user in users orderby user.Salary select user.Salary; Console.WriteLine(string.Join('\n', res)); record User(string FirstName, string LastName, int Salary);
我们有包含三个字段的用户列表:名字、姓氏和薪水。我们按薪水对用户进行排序,并只选择结果序列中的薪水字段。
$ dotnet run 670 980 1190 1230 1250 1930 2050 2300
在本文中,我们介绍了LINQSelect操作。
列出所有C#教程。