發表文章

精選文章

[C#] Linq進階API用法 & 組合技 (SelectMany, ToLookup, 笛卡兒積...)

C# / LINQ 用「資料形狀」思考 LINQ:SelectMany 與 10 個進階 API Select 、 Where 、 GroupBy 之後的下一步。每個範例都標出資料怎麼進、結果怎麼出—— 綠色註解就是答案 。 SelectMany 三用法 10 個進階 API 組合技 實戰:RulesEngine 形狀對照表 進階 LINQ 有個比背定義更好用的讀法: 看它讓資料的「形狀」怎麼變 。巢狀變扁平、兩條變一條、一條變一個值——記住形狀,API 自然就記住了。這篇每個 API 都附上一行形狀簽名,以及完整的輸入資料與輸出結果。 // SelectMany:進階 LINQ 的入口 它做的事只有一件:把「集合中的集合」攤平成一層。但三種用法各有妙處。 1 / 3 帶 result selector [[a, b], [c]] → [a, b, c] (每個元素還記得自己的爸爸) 最實用的 overload:攤平的同時 保留父層資訊 。第二個參數同時拿得到父元素和子元素。 // 資料 var orders = new[] { new { OrderId = 1, Customer = "小明" , Items = new[] { new { Product = "滑鼠" , Price = 500 }, new { Product = "鍵盤" , Price = 1200 } } }, new { OrderId = 2, Customer = "小華" , Items = new[] { new { Product = "螢幕" , Price = 4500 } } } }; var flat = orders. SelectMany (o => o.Items, (o, item) => new { o.OrderId, o.Customer, item.Product, item.Price }); // 結果:2 筆訂單 × 各自明細 → 攤成 3 列,每列都帶著父層的 Cu...

[SQL] 從零開始的大數據 SQL 優化: 用北風資料庫打造「零壓力分批轉檔」神級架構

從零開始的大數據 SQL 優化: 用北風資料庫打造「零壓力分批轉檔」神級架構 在日常開發中,我們常常面臨需要從舊表撈取資料、經過一連串運算與 JOIN 後,再將結果生成一張實體報表提供給前端或長官檢視的需求。然而,當資料量突破百萬、甚至千萬等級,且資料庫充滿了歷史包袱與非正規化結構時,傳統的作法往往會引發嚴重的 「磁碟 I/O 暴走」 或 「共用 tempdb 撐爆」 的慘劇,進而收到資料庫管理員(DBA)的奪命連環叩。 今天這篇文章,我們將結合 SELECT TOP 0 INTO 的複製神技,搭配 WHILE 迴圈與「事後補建索引」的進階心法,利用經典的 北風資料庫 (Northwind) 當作戰場,手把手帶你建構出一套兼具 高吞吐量、零 tempdb 負擔、且具備斷線容錯能力 的終極大數據處理方案! 一、 傳統作法與大數據瓶頸 面對大數據轉檔,初學者最常使用 SELECT INTO 或大型 CTE (Common Table Expression) 一口氣把資料全部灌進去。這種「一條 SQL 戰到底」的作法在小表運作良好,但遇到百萬級資料時,就會產生巨大的效能分水嶺: 暫存表 (#TempTable) 法 :直接整批塞進暫存表,會將幾百萬筆資料塞滿全系統共用的 tempdb 空間,導致其他線上即時交易跟著集體卡死報錯。 純 CTE / 子查詢法 :雖然避開了實體硬碟空間的消耗,但大量的資料串流在記憶體中反覆被多個 JOIN 呼叫時,會導致資料庫反覆重算,CPU 瞬間飆高至 100%。 【圖解:大量資料一次性寫入 vs 分批寫入的資料庫壓力對比】 [Image of Database table ingestion comparison showing monolithic query vs batching loops with tempdb lifecycle] 為了克服這些代價,高手工程師在實務上會採用 「分而治之 (Divide and Conquer)」 的策略:把一個會讓資料庫休克的大手術,拆解成數十個毫無負擔的微整形。這就是「分批處理...

[Cloud CICD] 全端應用程式 Azure 部署完整指南 Vue 3 + .NET 8 Web API + Azure SQL Database

Vue 3 + .NET 8 Web API + Azure SQL Database 從零開始,將現代化全端應用程式部署到 Microsoft Azure 雲端平台 📋 專案架構總覽 🎨 前端層 Vue 3 + Vite Azure Static Web Apps ⚙️ 後端層 .NET 8 Web API Azure App Service 🗄️ 資料層 SQL Server Azure SQL Database 💡 為什麼選擇這個技術組合? 現代化開發: Vue 3 Composition API + .NET 8 提供最新的開發體驗 完整整合: Azure 全家桶服務無縫配合,部署簡單 自動化 CI/CD: GitHub Actions 自動建置部署,提高效率 成本優化: 提供免費層級和彈性計費,適合各種規模專案 企業級安全: 內建 SSL、防火牆、備份機制 🗺️ 部署流程總覽 1 ...

[Cloud CICD] 資料庫篇 - Azure SQL Server + Azure SQL Database

前言: 本篇記錄了在 Azure 上建立 SQL Server 和 SQL Database 的完整流程,包含免費層資源選擇、本機 SSMS 連線、資料庫還原,以及防火牆設定。適合第一次在 Azure 上建立資料庫的開發者。 📦 基本概念 🤔 Azure SQL Server vs Azure SQL Database Azure SQL Server: 邏輯伺服器(類似容器),管理多個資料庫的安全性、登入帳號、防火牆規則 Azure SQL Database: 實際的資料庫實體,儲存資料表、預存程序等資料 關係: 一個 SQL Server 可以包含多個 Database(類似一台實體伺服器可以有多個資料庫) 🗺️ 建立流程總覽 1. 建立 Azure SQL Server ▼ 2. 建立 Azure SQL Database ▼ 3. 設定防火牆規則(本機 IP) ▼ 4. 使用 SSMS 連線 ▼ 5. 還原/匯入資料 ▼ 6. 設定後端防火牆(App Service IP) ▼ 7. 設定連線字串 📝 詳細步驟 1 建立 Azure SQL Server(邏輯伺服器) 登入 Azure Portal 搜尋「 SQL servers 」(注意是複數)→ 點擊「 建立 」 填寫基本資訊: 欄位 說明 / 建議值 訂用帳戶 ...

[Cloud CICD] 後端篇 - .Net8 WebApi, Github Action, Azure App Service

前言: 本篇記錄了將 .NET 8 Web API 專案部署到 Azure App Service 的完整流程,包含 GitHub Actions 自動化部署設定。重點包含 Publish Profile 設定 、 環境變數階層設定 ,以及 Database 防火牆 IP 白名單設定 。 📦 技術堆疊 ⚙️ 後端框架 .NET 8 Web API 🔄 CI/CD GitHub Actions ☁️ 雲端平台 Azure App Service 🗺️ 部署流程總覽 1. 推送 .NET 8 API 至 GitHub ▼ 2. 建立 Azure App Service ▼ 3. 下載 Publish Profile ▼ 4. 設定 GitHub Secrets ▼ 5. 建立 GitHub Actions Workflow ▼ 6. 設定 Environment Variables ▼ 7. 設定 Database 防火牆 ▼ 8. 部署成功 🎉 📝 詳細步驟 1 推送 .NET 8 Web API 專案至 GitHub 確保你的 .NET 8 Web API 專案已建立並推送到 GitHub Repository。 📁 專案結構檢查 project-root/ ├── Controllers/ # API Controllers ├── Models/ # 資料模型 ├── Services/ ...