标签:
语言集成查询 (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 Teacher 13 { 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 students 56 where student.City == "梦里" 57 select student.Name) 58 .Concat(from teacher in teachers 59 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 Customers 2 select cust.City;
2. 若要创建包含源元素的多个属性的元素,可以使用具有命名对象或匿名类型的对象初始值设定项。
1 var query = from cust in Customer 2 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 studentsToXml = new XElement("Root", 26 from student in students 27 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(studentsToXml);
输出序列可能不包含源序列的任何元素或元素属性。输出可能是通过将源元素用作输入参数计算出的值的序列。
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 进行数据转换
标签:
原文地址:http://www.cnblogs.com/liqingwen/p/5788505.html