开始使用 LINQ(三)- 使用 LINQ 进行数据转换
语言集成查询 (LINQ) 不仅可用于检索数据, 而且还是一个功能强大的数据转换工具。 通过使用 LINQ 查询,您可以将源序列用作输入,并采用多种方式修改它以创建新的输出序列。您可以通过排序和分组来修改该序列,而不必修改元素本身。但是,LINQ 查询的最强大的功能是能够创建新类型。这一功能在 select 子句中实现。 例如,可以执行下列任务:
一、 将多个输入联接到一个输出序列
1 class Student 2 { 3 public string Name { get; set; } 4 5 public int Age { get; set; } 6 7 public string City { get; set; } 8 9 public List<int> Scores { get; set; }10 }11 12 class Teacher13 {14 public int Id { get; set; }15 16 public string Name { get; set; }17 18 public int Age { get; set; }19 20 public string City { get; set; }21 22 }
学生和老师两个类
1 internal class Program 2 { 3 private static void Main(string[] args) 4 { 5 //创建第一个数据源 6 var students = new List<Student>() 7 { 8 new Student() 9 {10 Age = 23,11 City = "广州",12 Name = "小C",13 Scores = new List<int>(){85,88,83,97}14 },15 new Student()16 {17 Age = 18,18 City = "广西",19 Name = "小明",20 Scores = new List<int>(){86,78,85,90}21 },22 new Student()23 {24 Age = 33,25 City = "梦里",26 Name = "小叁",27 Scores = new List<int>(){86,68,73,97}28 }29 };30 31 //创建第二个数据源32 var teachers = new List<Teacher>()33 {34 new Teacher()35 {36 Age = 35,37 City = "梦里",38 Name = "啵哆"39 },40 new Teacher()41 {42 Age = 28,43 City = "云南",44 Name = "小红"45 },46 new Teacher()47 {48 Age = 38,49 City = "河南",50 Name = "丽丽"51 }52 };53 54 //创建查询55 var peopleInDreams = (from student in students56 where student.City == "梦里"57 select student.Name)58 .Concat(from teacher in teachers59 where teacher.City == "梦里"60 select teacher.Name);61 62 //执行查询63 foreach (var person in peopleInDreams)64 {65 Console.WriteLine(person);66 }67 68 Console.Read();69 }70 }
二、 选择各个源元素的子集
1. 若要只选择源元素的一个成员,请使用点运算。
1 var query = from cust in Customers2 select cust.City;
2. 若要创建包含源元素的多个属性的元素,可以使用具有命名对象或匿名类型的对象初始值设定项。
1 var query = from cust in Customer2 select new {Name = cust.Name, City = cust.City};
三、将内存中的对象转换为
1 //创建数据源 2 var students = new List<Student>() 3 { 4 new Student() 5 { 6 Age = 18, 7 Name = "小A", 8 Scores = new List<int>() {88,85,74,66 } 9 },10 new Student()11 {12 Age = 35,13 Name = "小B",14 Scores = new List<int>() {88,85,74,66 }15 },16 new Student()17 {18 Age = 28,19 Name = "小啥",20 Scores = new List<int>() {88,85,74,66 }21 }22 };23 24 //创建查询25 var studentsTonew XElement("Root",26 from student in students27 let x = $"{student.Scores[0]},{student.Scores[1]},{student.Scores[2]},{student.Scores[3]}"28 select new XElement("student",29 new XElement("Name", student.Name),30 new XElement("Age", student.Age),31 new XElement("Scores", x))32 );33 34 //执行查询35 Console.WriteLine(studentsTo
四、对源元素执行操作
输出序列可能不包含源序列的任何元素或元素属性。输出可能是通过将源元素用作输入参数计算出的值的序列。
1 //数据源 2 double[] radii = {1, 2, 3}; 3 4 //创建查询 5 var query = from radius in radii 6 select $"{radius * radius * 3.14}"; 7 8 //执行查询 9 foreach (var i in query)10 {11 Console.WriteLine(i);12 }
【来源】本文文字主要来自微软官方文档
原标题:LINQ:开始使用 LINQ(三)
关键词:linq