在向大家详细介绍使用LINQ进行数据转换之前,首先让大家了解下使用LINQ查询,然后全面介绍使用LINQ进行数据转换。
使用LINQ进行数据转换
语言集成查询 (LINQ) 不仅可用于检索数据,而是还是一个功能强大的数据转换工具。通过使用LINQ查询,您可以将源序列用作输入,并采用多种方式修改它以创建新输出序列。您可以通过排序和分组来修改序列本身,而不必修改元素本身。但是,LINQ 查询最强大的功能可能在于它能够创建新类型。这一功能在 select 子句中实现。例如,可以执行下列任务:
◆将多个输入序列合并到具有新类型的单个输出序列中。
◆创建其元素只包含源序列中的各个元素的一个或几个属性的输出序列。
◆创建其元素包含对源数据执行的操作结果的输出序列。
◆创建不同格式的输出序列。例如,您可以将 SQL 行或文本文件的数据转换为 XML。
这只是几个示例。当然,可以采用多种方式将这些转换组合在同一查询中。另外,一个查询的输出序列可用作新查询的输入序列。
将多个输入联接到一个输出序列
可以使用LINQ查询来创建包含多个输入序列的元素的输出序列。下面的示例演示如何组合两个内存中的数据结构,但组合来自 XML 或 SQL 或数据集源的数据时可应用相同的原则。假定下面两种类类型:
- class Student
- {
- public string First { get; set; }
- public string Last {get; set;}
- public int ID { get; set; }
- public string Street { get; set; }
- public string City { get; set; }
- public List<int> Scores;
- }
- class Teacher
- {
- public string First { get; set; }
- public string Last { get; set; }
- public int ID { get; set; }
- public string City { get; set; }
- }
下面的示例演示该查询:
- class DataTransformations
- {
- static void Main()
- {
- // Create the first data source.
- List<Student> students = new List<Student>()
- {
- new Student {First="Svetlana",
- Last="Omelchenko",
- ID=111,
- Street="123 Main Street",
- City="Seattle",
- Scores= new List<int> {97, 92, 81, 60}},
- new Student {First="Claire",
- Last="O’Donnell",
- ID=112,
- Street="124 Main Street",
- City="Redmond",
- Scores= new List<int> {75, 84, 91, 39}},
- new Student {First="Sven",
- Last="Mortensen",
- ID=113,
- Street="125 Main Street",
- City="Lake City",
- Scores= new List<int> {88, 94, 65, 91}},
- };
- // Create the second data source.
- List<Teacher> teachers = new List<Teacher>()
- {
- new Teacher {First="Ann", Last="Beebe", ID=945, City = "Seattle"},
- new Teacher {First="Alex", Last="Robinson", ID=956, City = "Redmond"},
- new Teacher {First="Michiyo", Last="Sato", ID=972, City = "Tacoma"}
- };
- // Create the query.
- var peopleInSeattle = (from student in students
- where student.City == "Seattle"
- select student.Last)
- .Concat(from teacher in teachers
- where teacher.City == "Seattle"
- select teacher.Last);
- Console.WriteLine("The following students and teachers live in Seattle:");
- // Execute the query.
- foreach (var person in peopleInSeattle)
- {
- Console.WriteLine(person);
- }
- Console.WriteLine("Press any key to exit.");
- Console.ReadKey();
- }
- }
以上介绍使用LINQ进行数据转换
【编辑推荐】