你的位置:首页 > ASP.net教程

[ASP.net教程]LINQ:开始使用 LINQ(三)


开始使用 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       }



 

【来源】本文文字主要来自微软官方文档