首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

使用 LINQ 進行資料轉換:從篩選、投影到 XML 輸出的實戰模式

     編輯:關於.NET

LINQ 不只是查詢,更是強大的資料轉換引擎

透過 select 子句建立新型別,可將來源序列轉換為任意形狀的輸出序列:合併多源、擷取子集、計算衍生值、轉換格式(如 SQL 行 → XML)。查詢結果可串接作為下一個查詢的輸入,形成管線。

模式一:合併多個輸入序列

class Student { public string First, Last, City; public int ID; public List<int> Scores; }
class Teacher { public string First, Last, City; public int ID; }

var peopleInSeattle = (from s in students where s.City == "Seattle" select s.Last)
    .Concat(from t in teachers where t.City == "Seattle" select t.Last);
// 輸出: Omelchenko, Beebe

模式二:選擇來源元素的子集(投影)

單一屬性:點運算子

var cities = from c in Customers select c.City; // IEnumerable<string>

多屬性:匿名型別

var summary = from c in Customers
              select new { Name = c.Name, City = c.City }; // IEnumerable<匿名型別>

模式三:將記憶體物件轉換為 XML

var studentsToXML = new XElement("Root",
    from s in students
    let scores = string.Join(",", s.Scores)
    select new XElement("student",
        new XElement("First", s.First),
        new XElement("Last", s.Last),
        new XElement("Scores", scores)
    )
);
// 輸出完整 XML 文件
輸出範例:
<Root>
  <student><First>Svetlana</First><Last>Omelchenko</Last><Scores>97,92,81,60</Scores></student>
  <student><First>Claire</First><Last>O'Donnell</Last><Scores>75,84,91,39</Scores></student>
  <student><First>Sven</First><Last>Mortensen</Last><Scores>88,94,65,91</Scores></student>
</Root>

模式四:對來源元素執行運算產生衍生值


double[] radii = { 1, 2, 3 };
IEnumerable<string> areas = from r in radii
    select string.Format("Area = {0}", r * r * 3.14);
// 輸出: Area = 3.14, Area = 12.56, Area = 28.26

組合管線:查詢的輸出作為下一個查詢的輸入


// 先轉 XML,再查詢 XML
var highScores = from x in studentsToXML.Elements("student")
                 where (int)x.Element("Scores").Value.Split(',').Max() > 90
                 select x.Element("Last").Value;

總結

LINQ 的轉換能力在於 select 子句的靈活性:

  • 合併:Concat、Union、Join、GroupJoin。
  • 投影:匿名型別、具名型別、Tuple、動態物件。
  • 格式轉換:物件 ↔ XML ↔ JSON ↔ CSV 皆可在查詢中完成。
  • 計算衍生:任意運算、格式化、條件邏輯。

善用「查詢即資料、資料即查詢」的組合性,能以宣告式風格替代大量命令式迴圈與中間集合。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved