Enviar pesquisa
Carregar
保哥線上講堂:LINQ 快速上手
•
87 gostaram
•
20,990 visualizações
Will Huang
Seguir
保哥線上講堂:Language-Integrated Query (LINQ) 快速上手
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 41
Recomendados
Raspberry Piで始める自宅サーバー超入門
Raspberry Piで始める自宅サーバー超入門
VirtualTech Japan Inc./Begi.net Inc.
Linux Linux Traffic Control
Linux Linux Traffic Control
SUSE Labs Taipei
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
Yoshifumi Kawai
ヤフーのプライベートクラウドとクラウドエンジニアの業務について
ヤフーのプライベートクラウドとクラウドエンジニアの業務について
Yahoo!デベロッパーネットワーク
HTTP and 5G (fixed1)
HTTP and 5G (fixed1)
dynamis
知っておきたいASTERIA WARPの強制終了
知っておきたいASTERIA WARPの強制終了
ASTERIA User Group
2018年度オフシーズンにやったこと
2018年度オフシーズンにやったこと
RyogaSato2
HTTP2 最速実装 〜入門編〜
HTTP2 最速実装 〜入門編〜
Kaoru Maeda
Recomendados
Raspberry Piで始める自宅サーバー超入門
Raspberry Piで始める自宅サーバー超入門
VirtualTech Japan Inc./Begi.net Inc.
Linux Linux Traffic Control
Linux Linux Traffic Control
SUSE Labs Taipei
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
Yoshifumi Kawai
ヤフーのプライベートクラウドとクラウドエンジニアの業務について
ヤフーのプライベートクラウドとクラウドエンジニアの業務について
Yahoo!デベロッパーネットワーク
HTTP and 5G (fixed1)
HTTP and 5G (fixed1)
dynamis
知っておきたいASTERIA WARPの強制終了
知っておきたいASTERIA WARPの強制終了
ASTERIA User Group
2018年度オフシーズンにやったこと
2018年度オフシーズンにやったこと
RyogaSato2
HTTP2 最速実装 〜入門編〜
HTTP2 最速実装 〜入門編〜
Kaoru Maeda
MySQL勉強会 クエリチューニング編
MySQL勉強会 クエリチューニング編
MicroAd, Inc.(Engineer)
Linux女子部 iptables復習編
Linux女子部 iptables復習編
Etsuji Nakai
レシピの作り方入門
レシピの作り方入門
Nobuhiro Iwamatsu
RestfulなAPIの設計のお話
RestfulなAPIの設計のお話
ftsan
mTCP使ってみた
mTCP使ってみた
Hajime Tazaki
HA Deployment Architecture with HAProxy and Keepalived
HA Deployment Architecture with HAProxy and Keepalived
Ganapathi Kandaswamy
Developing SDN apps in Ryu
Developing SDN apps in Ryu
Che Wei Lin
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
Tetsuya Hasegawa
GitLabで始めるDevOps入門
GitLabで始めるDevOps入門
富士通クラウドテクノロジーズ株式会社
WebRTC multitrack / multistream
WebRTC multitrack / multistream
mganeko
自宅サーバラックの勧め BGP4編
自宅サーバラックの勧め BGP4編
h-otter
Shodan- That Device Search Engine
Shodan- That Device Search Engine
InMobi Technology
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
Kazuho Oku
Telemetry事始め
Telemetry事始め
npsg
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
Yasutomo Uemori
4章 Linuxカーネル - 割り込み・例外 5
4章 Linuxカーネル - 割り込み・例外 5
mao999
Chunked encoding を使った高速化の考察
Chunked encoding を使った高速化の考察
Yoshiki Shibukawa
UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編
hdais
Entity framework 入門第一課
Entity framework 入門第一課
Sean Lu
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
Will Huang
Mais conteúdo relacionado
Mais procurados
MySQL勉強会 クエリチューニング編
MySQL勉強会 クエリチューニング編
MicroAd, Inc.(Engineer)
Linux女子部 iptables復習編
Linux女子部 iptables復習編
Etsuji Nakai
レシピの作り方入門
レシピの作り方入門
Nobuhiro Iwamatsu
RestfulなAPIの設計のお話
RestfulなAPIの設計のお話
ftsan
mTCP使ってみた
mTCP使ってみた
Hajime Tazaki
HA Deployment Architecture with HAProxy and Keepalived
HA Deployment Architecture with HAProxy and Keepalived
Ganapathi Kandaswamy
Developing SDN apps in Ryu
Developing SDN apps in Ryu
Che Wei Lin
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
Tetsuya Hasegawa
GitLabで始めるDevOps入門
GitLabで始めるDevOps入門
富士通クラウドテクノロジーズ株式会社
WebRTC multitrack / multistream
WebRTC multitrack / multistream
mganeko
自宅サーバラックの勧め BGP4編
自宅サーバラックの勧め BGP4編
h-otter
Shodan- That Device Search Engine
Shodan- That Device Search Engine
InMobi Technology
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
Kazuho Oku
Telemetry事始め
Telemetry事始め
npsg
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
Yasutomo Uemori
4章 Linuxカーネル - 割り込み・例外 5
4章 Linuxカーネル - 割り込み・例外 5
mao999
Chunked encoding を使った高速化の考察
Chunked encoding を使った高速化の考察
Yoshiki Shibukawa
UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編
hdais
Mais procurados
(20)
MySQL勉強会 クエリチューニング編
MySQL勉強会 クエリチューニング編
Linux女子部 iptables復習編
Linux女子部 iptables復習編
レシピの作り方入門
レシピの作り方入門
RestfulなAPIの設計のお話
RestfulなAPIの設計のお話
mTCP使ってみた
mTCP使ってみた
HA Deployment Architecture with HAProxy and Keepalived
HA Deployment Architecture with HAProxy and Keepalived
Developing SDN apps in Ryu
Developing SDN apps in Ryu
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
GitLabで始めるDevOps入門
GitLabで始めるDevOps入門
WebRTC multitrack / multistream
WebRTC multitrack / multistream
自宅サーバラックの勧め BGP4編
自宅サーバラックの勧め BGP4編
Shodan- That Device Search Engine
Shodan- That Device Search Engine
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
Telemetry事始め
Telemetry事始め
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
4章 Linuxカーネル - 割り込み・例外 5
4章 Linuxカーネル - 割り込み・例外 5
Chunked encoding を使った高速化の考察
Chunked encoding を使った高速化の考察
UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編
Destaque
Entity framework 入門第一課
Entity framework 入門第一課
Sean Lu
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
Will Huang
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
Will Huang
Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)
Will Huang
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
Will Huang
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
Will Huang
ASP.NET MVC 5 新功能探索
ASP.NET MVC 5 新功能探索
Will Huang
Visual Studio 2015 與 Git 開發實戰
Visual Studio 2015 與 Git 開發實戰
Will Huang
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽
Will Huang
簡介 GitHub 平台
簡介 GitHub 平台
Will Huang
快快樂樂學 Angular 2 開發框架
快快樂樂學 Angular 2 開發框架
Will Huang
從開發人員角度十分鐘理解區塊鏈技術
從開發人員角度十分鐘理解區塊鏈技術
Will Huang
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
Will Huang
ASP.NET MVC 善用網路資源快速完打造網站
ASP.NET MVC 善用網路資源快速完打造網站
twMVC
Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4
Kyle Shen
2016 ModernWeb 分享 - 恰如其分 MySQL 程式設計 (修)
2016 ModernWeb 分享 - 恰如其分 MySQL 程式設計 (修)
Win Yu
《多奇線上講堂》如何用 Outlook 和 OWA 整理聯絡人資訊
《多奇線上講堂》如何用 Outlook 和 OWA 整理聯絡人資訊
Will Huang
如何將現有 Web form 轉換到mvc
如何將現有 Web form 轉換到mvc
Gelis Wu
簡介 Git hub 平台 ( 1.5 hrs )
簡介 Git hub 平台 ( 1.5 hrs )
Will Huang
git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用
Will Huang
Destaque
(20)
Entity framework 入門第一課
Entity framework 入門第一課
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
ASP.NET MVC 5 新功能探索
ASP.NET MVC 5 新功能探索
Visual Studio 2015 與 Git 開發實戰
Visual Studio 2015 與 Git 開發實戰
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽
簡介 GitHub 平台
簡介 GitHub 平台
快快樂樂學 Angular 2 開發框架
快快樂樂學 Angular 2 開發框架
從開發人員角度十分鐘理解區塊鏈技術
從開發人員角度十分鐘理解區塊鏈技術
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
ASP.NET MVC 善用網路資源快速完打造網站
ASP.NET MVC 善用網路資源快速完打造網站
Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4
2016 ModernWeb 分享 - 恰如其分 MySQL 程式設計 (修)
2016 ModernWeb 分享 - 恰如其分 MySQL 程式設計 (修)
《多奇線上講堂》如何用 Outlook 和 OWA 整理聯絡人資訊
《多奇線上講堂》如何用 Outlook 和 OWA 整理聯絡人資訊
如何將現有 Web form 轉換到mvc
如何將現有 Web form 轉換到mvc
簡介 Git hub 平台 ( 1.5 hrs )
簡介 Git hub 平台 ( 1.5 hrs )
git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用
Semelhante a 保哥線上講堂:LINQ 快速上手
Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南
HonestQiao
Study4.TW .NET Conf 2018 - Fp in c#
Study4.TW .NET Conf 2018 - Fp in c#
Chieh Kai Yang
Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)
Will Huang
N-layer design & development
N-layer design & development
Xuefeng Zhang
Baidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log Analysis
Xiaoming Chen
LabView with Lego NXT
LabView with Lego NXT
CAVEDU Education
IOS入门分享
IOS入门分享
zenyuhao
Python 于 webgame 的应用
Python 于 webgame 的应用
勇浩 赖
Hands on data analysis 101
Hands on data analysis 101
FEG
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
Justin Lin
Python 脚本入门基础
Python 脚本入门基础
wklken
getPDF.aspx
getPDF.aspx
byron zhao
getPDF.aspx
getPDF.aspx
byron zhao
02.python基础
02.python基础
modou li
COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺
宗凡 楊
COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺
hydai
Elastic stack day-1
Elastic stack day-1
YI-CHING WU
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
tidesq
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
czzz1
Linq 入门
Linq 入门
greenerycn
Semelhante a 保哥線上講堂:LINQ 快速上手
(20)
Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南
Study4.TW .NET Conf 2018 - Fp in c#
Study4.TW .NET Conf 2018 - Fp in c#
Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)
N-layer design & development
N-layer design & development
Baidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log Analysis
LabView with Lego NXT
LabView with Lego NXT
IOS入门分享
IOS入门分享
Python 于 webgame 的应用
Python 于 webgame 的应用
Hands on data analysis 101
Hands on data analysis 101
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
Python 脚本入门基础
Python 脚本入门基础
getPDF.aspx
getPDF.aspx
getPDF.aspx
getPDF.aspx
02.python基础
02.python基础
COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺
COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺
Elastic stack day-1
Elastic stack day-1
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
Linq 入门
Linq 入门
Mais de Will Huang
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
Will Huang
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
Will Huang
ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索
Will Huang
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
Will Huang
你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧
Will Huang
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
Will Huang
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
Will Huang
Micro-frontends with Angular 10 (Modern Web 2020)
Micro-frontends with Angular 10 (Modern Web 2020)
Will Huang
從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點
Will Huang
RxJS 6 新手入門
RxJS 6 新手入門
Will Huang
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)
Will Huang
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
Will Huang
Protractor: The Hacker way (NG-MY 2019)
Protractor: The Hacker way (NG-MY 2019)
Will Huang
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
Will Huang
Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)
Will Huang
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
Will Huang
AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)
Will Huang
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
Will Huang
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
Will Huang
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
Will Huang
Mais de Will Huang
(20)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
Micro-frontends with Angular 10 (Modern Web 2020)
Micro-frontends with Angular 10 (Modern Web 2020)
從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點
RxJS 6 新手入門
RxJS 6 新手入門
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
Protractor: The Hacker way (NG-MY 2019)
Protractor: The Hacker way (NG-MY 2019)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
保哥線上講堂:LINQ 快速上手
1.
« LINQ 快速上手
» 多奇數位創意有限公司 技術總監 黃保翕 ( Will 保哥 ) 部落格:http://blog.miniasp.com/
2.
LINQ 簡介 Introducing LINQ
3.
LINQ is one
of Microsoft's most exciting, powerful new development technologies. from MSDN (2009)
4.
什麼是 LINQ • 全名:Language
INtegrated Query • LINQ 是 Visual Studio 2008 引進的一組功能,可 將強大的查詢功能擴充至 C# 和 Visual Basic 的 語言語法。 ( C# 3.0 ) • LINQ 推出標準且容易學習的資料查詢與更新模式, 而且這項技術可擴充為支援幾乎所有類型的資料 存放區。 • Visual Studio 包括 LINQ 提供者組件,可讓您使 用 LINQ 搭配 .NET Framework 集合、SQL Server 資料庫、ADO.NET 資料集和 XML 文件。 4
5.
LINQ to Objects •
LINQ to Object 可以針對所有實作 IEnumerable 或 IEnumerable<T>泛型介面的集合物件進行查詢 或更新。 – Array, ArrayList, IList, … – ILists<T>, Collection<T>, IQueryable<T>, … • 範例 5
6.
範例:對資料進行篩選 ( C#
2.0 ) 6
7.
範例:對資料進行篩選 ( C#
3.0 ) 7
8.
LINQ to SQL •
LINQ to SQL 可以針對 SQL Server 資料庫 中的資料進行查詢或更新。 • 範例 – 以北風資料庫為例 http://go.microsoft.com/fwlink/?linkid=30196 8
9.
範例:對資料進行篩選 ( C#
2.0 )
10.
範例:對資料進行篩選 ( C#
3.0 ) 10
11.
LINQ to XML •
LINQ to XML 可以針對記憶體中的 XML 資料 進行查詢或更新。 11
12.
範例:對資料進行篩選 ( C#
3.0 ) 12
13.
LINQ to Wikipedia •
LINQ to Wikipedia 是一個自訂的 LINQ 查詢 提供者,透過 Mediawiki API 進行實作,提供 一個 LINQ 查詢介面,可以針對 Wikipedia 網 站的內容進行查詢。 13
14.
LINQ 的重要特性 • 獨立於資料來源 –
使用統一的查詢語法(LINQ)查詢資料 • 強型別 & 編譯時期檢查 – T-SQL 是個語法,以字串表示,無法進行編譯 – LINQ 是個語法,以 C# 表示 (強型別),可編譯 • 延遲執行 / 延遲載入 – 建立完查詢時,並沒有真正執行查詢命令 – 透過 ToList() 或透過 foreach 才會真的開始執行 • 比「查詢」多更多! – 可結合函式語言特性、平行處理、reactive programming – 不僅僅改變了處裡資料的方法,更改變了思考問題的方式14
15.
LINQ 架構 15
16.
.NET 3.5 FCL
內建的 LINQ 提供者 • LINQ to Objects – 提供 .NET 物件 在 LINQ 查詢相關的類別庫實作 • LINQ to SQL – 提供 SQL Server 在 LINQ 查詢相關的類別庫實作 • LINQ to XML – 提供 XML 物件 在 LINQ 查詢相關的類別庫實作 • LINQ to DataSets – 提供 DataSet 物件 在 LINQ 查詢相關的類別庫實作 • LINQ to Entities – 提供 關聯式資料庫 在 LINQ 查詢相關的類別庫實作 16
17.
支援 LINQ 的程式語言 •
官方支援 – C# 3.0+ – VB 9.0+ • 語言特性 – 查詢語法 ( from … in … where … select … ) – 匿名型別與靜態型別推導 – 擴充方法 – Lambda 表達式 17
18.
C# 的演進 C# 1.0 C#
2.0 C# 3.0 Managed Code (BCL, FCL) Generics (泛型) Language Integrated Query (LINQ) C# 4.0 Dynamic Programming PDC2008: The Future of C#
19.
C# 2.0 • C#
2.0 – 部分類別 ( Partial class ) – 泛型 ( Generics ) List<T> – 靜態類別 ( Static classes ) static – 產生器功能 ( Generator functionality ) yield • IEnumerable<T> – 匿名委派 ( Anonymous delegates ) delegate – 委派的協變與逆變 ( Delegate covariance and contravariance ) – 屬性 (Property) 的 get / set 存取子可不同存取性 ( The accessibility of property accessors can be set independently ) – 允許空值的實值型別 ( Nullable types ) int? – null 聯合運算子 ( Null-coalescing operator ) ?? 19
20.
C# 3.0 • C#
3.0 – LINQ 查詢運算式 (language-integrated query) – 物件和集合初始設定式 ( Object and Collection initializers ) – 匿名型別 ( Anonymous types ) – 隱含類型區域變數 ( Local variable type inference ) – Lambda 運算式 ( Lambda expressions ) – 運算式樹狀架構 ( Expression trees ) – 自動實作的屬性 ( Automatic properties ) – 擴充方法 ( Extension methods ) – 部分類別和方法 ( Partial class and methods ) 20
21.
C# 4.0 • C#
4.0 – 動態型別 ( Dynamic member lookup ) – 泛型中的共變數和反變數 ( Covariant and contravariant generic type parameters ) – 選擇性參數與具名參數 ( Optional parameters and named arguments ) – 使用 COM Interop 物件時不用再加上 ref 關鍵字 ( Optional ref keyword when using COM ) – 在 COM Interop 程式設計中使用索引的屬性 ( Indexed properties ) 21
22.
泛型與 LINQ 命名空間 •
System.Collections.Generic – 包含會定義泛型集合的介面和類別,可讓使用者建立 強型別集合,提供比起非泛型強型別集合更佳的型別 安全和效能。 • System.Linq – 提供能夠支援查詢使用 LINQ 的類別和介面。 • System.Linq.Expressions – 包含類別、介面和列舉,可使用運算式樹狀結構格式 將這些語言層級程式碼運算式表示為物件。 ※ LINQ 全名是 Language-Integrated Query 22
23.
開始使用 LINQ 查詢 Getting
Started with LINQ in C#
24.
關於 LINQ 查詢 •
所有的 LINQ 查詢 皆包含以下三步驟 – 取得資料來源 – 建立查詢 ( LINQ 查詢運算式 ) – 執行查詢 24
25.
1. 取得資料來源 25
26.
2. 建立查詢 (
LINQ 查詢運算式 ) • Enumerable 方法 – Restriction: Where, OfType – Projection: Select, SelectMany – Ordering: OrderBy, OrderByDescending, ThenBy, ThenByDescending, Reverse – Join: Join, GroupJoin – Grouping: GroupBy – Set: Zip, Distinct, Union, Intersect, Except – Aggregation: Aggregate, Count, LongCount, Sum, Min, Max, Average – Partitioning: Take, TakeWhile, Skip, SkipWhile – Cancatening: Concat – Conversion:ToArray, ToList, ToDictionary, ToLookup, Cast – Equality: SequenceEqual – Elements: First, FirstOrDefault, Last, LastOrDefault, Single, SingleOrDefault, ElementAt, ElementAtOrDefault, DefaultIfEmpty – Generation: Range, Repeat, Empty – Qualifiers: Any, All, Contains 26
27.
3. 執行查詢 • IEnumerable
and IEnumerable<T> • 免除所有基礎的原理,用 foreach 就對了! • 執行 foreach 時同時逐步取得集合物件的內容 ( 並非一次將資料抓完,而是抓一筆算一筆 ) • 延遲載入 v.s. 預先載入 27
28.
LINQ 的兩種寫法 • 編程式
(Imperative) λ ( 讀音: lambda ) IEnumerable<int> results = source .Where(integer => integer > 0) .OrderByDescending(integer => integer); • 宣告式 (Declarative) LINQ ( 讀音: Link ) var results = from integer in source where integer > 0 orderby integer descending select integer; 28
29.
LINQ 查詢語法一覽 29
30.
練習各式 LINQ 查詢 Practices
31.
基本資料過濾 • 取得資料來源 int[] source
= new int[] { 0, -5, 12, -54, 5, -67, 3, 6 }; string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" }; • 建立查詢 – 請在 LINQPad 中撰寫程式碼 ( 各使用 LINQ 與 λ 語法) • 篩選出 source 陣列中小於 0 的數字 • 篩選出 names 陣列中字串長度大於 3 個字元的字串 var data = …; • 執行查詢 data.Dump(); 32
32.
流體風格(Fluent Syntax) • 取得資料來源 string[]
names = { "Tom", "Dick", "Harry", "Mary", "Jay" }; • 建立查詢 IEnumerable<string> query = names .Where (n => n.Contains ("a")) .OrderBy (n => n.Length) .Select (n => n.ToUpper()); • 執行查詢 query.Dump(); 33
33.
透過 LINQPad 翻譯
λ 程式寫法 • 來源資料 ( IEnumerable<T> ) var names = new[] { "Tom", "Dick", "Harry", "Mary", "Jay" }; • 來源資料 ( IQueryable<T> ) var names = new[] { "Tom", "Dick", "Harry", "Mary", "Jay" }.AsQueryable(); 34
34.
混搭 LINQ 與
λ 語法 • (from n in names where n.Contains ("a") select n).Count() • (from n in names orderby n select n).First() • names.Where (n => n.Contains ("a")).Count() • names.OrderBy (n => n).First() 35
35.
延遲載入 v.s. 預先載入 •
標示粗體的都是「預先載入」的方法,加上 [ ] 的都是最佳化過的方法 – Restriction: Where, OfType – Projection: Select, SelectMany – Ordering: OrderBy, OrderByDescending, ThenBy, ThenByDescending, Reverse – Join: Join, GroupJoin – Grouping: GroupBy – Set: Zip, Distinct, Union, Intersect, Except – Aggregation: Aggregate, [Count], LongCount, Sum, Min, Max, Average – Partitioning: Take, TakeWhile, Skip, SkipWhile – Cancatening: Concat – Conversion: ToArray, ToList, ToDictionary, ToLookup, [Cast] – Equality: SequenceEqual – Elements: [First], [FirstOrDefault], [Last], [LastOrDefault], [Single], [SingleOrDefault], [ElementAt], [ElementAtOrDefault], DefaultIfEmpty – Generation: Range, Repeat, Empty – Qualifiers: Any, All, [Contains] 36
36.
延遲載入範例 • 建立清單 – var
numbers = new List<int>(); – numbers.Add (1); • 建立查詢 – IEnumerable<int> query = numbers.Select (n => n * 10); • 增加清單項目 – numbers.Add (2); • 執行查詢 – query.Dump(); 37 ※ 請回答 query 輸出的結果為何?
37.
預先載入範例 • 建立清單 – var
numbers = new List<int>() { 1, 2 }; • 建立查詢並且預先載入資料 – List<int> timesTen = numbers.Select (n => n * 10).ToList(); • 清空清單項目 – numbers.Clear(); • 執行查詢 – timesTen.Dump(); 38 ※ 請回答 timesTen 輸出的結果為何?
38.
閉包範例 int[] numbers =
{ 1, 2 }; int factor = 10; IEnumerable<int> query = numbers.Select (n => n * factor); factor = 20; query.Dump (); 39 ※ 請回答 query 輸出的結果為何?
39.
子查詢範例 names.Where(n => n.Length
== names.OrderBy (n2 => n2.Length) .Select (n2 => n2.Length).First()) .Dump(); var query = ( from n in names where n.Length == (from n2 in names orderby n2.Length select n2.Length).First() select n ).Dump(); 40 ※ 少用子查詢,因為效能不好!
40.
相關連結 • LINQ via
C# • LINQ (Language-Integrated Query) [中文] • LINQ 查詢運算式 (C# 程式設計手冊)
41.
聯絡資訊 • The Will
Will Web 記載著 Will 在網路世界的學習心得與技術分享 – http://blog.miniasp.com/ • Will 保哥的技術交流中心 (臉書粉絲專頁) – http://www.facebook.com/will.fans • Will 保哥的噗浪 – http://www.plurk.com/willh/invite