使用LINQ進行數(shù)據(jù)轉(zhuǎn)換剖析
在向大家詳細(xì)介紹使用LINQ進行數(shù)據(jù)轉(zhuǎn)換之前,首先讓大家了解下使用LINQ查詢,然后全面介紹使用LINQ進行數(shù)據(jù)轉(zhuǎn)換。
使用LINQ進行數(shù)據(jù)轉(zhuǎn)換
語言集成查詢 (LINQ) 不僅可用于檢索數(shù)據(jù),而是還是一個功能強大的數(shù)據(jù)轉(zhuǎn)換工具。通過使用LINQ查詢,您可以將源序列用作輸入,并采用多種方式修改它以創(chuàng)建新輸出序列。您可以通過排序和分組來修改序列本身,而不必修改元素本身。但是,LINQ 查詢最強大的功能可能在于它能夠創(chuàng)建新類型。這一功能在 select 子句中實現(xiàn)。例如,可以執(zhí)行下列任務(wù):
◆將多個輸入序列合并到具有新類型的單個輸出序列中。
◆創(chuàng)建其元素只包含源序列中的各個元素的一個或幾個屬性的輸出序列。
◆創(chuàng)建其元素包含對源數(shù)據(jù)執(zhí)行的操作結(jié)果的輸出序列。
◆創(chuàng)建不同格式的輸出序列。例如,您可以將 SQL 行或文本文件的數(shù)據(jù)轉(zhuǎn)換為 XML。
這只是幾個示例。當(dāng)然,可以采用多種方式將這些轉(zhuǎn)換組合在同一查詢中。另外,一個查詢的輸出序列可用作新查詢的輸入序列。
將多個輸入聯(lián)接到一個輸出序列
可以使用LINQ查詢來創(chuàng)建包含多個輸入序列的元素的輸出序列。下面的示例演示如何組合兩個內(nèi)存中的數(shù)據(jù)結(jié)構(gòu),但組合來自 XML 或 SQL 或數(shù)據(jù)集源的數(shù)據(jù)時可應(yīng)用相同的原則。假定下面兩種類類型:
- 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進行數(shù)據(jù)轉(zhuǎn)換
【編輯推薦】