teaching guide 5462

62
.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N i ườ TÀI LI U H NG D N GI NG D Y ƯỚ DÀNH CHO GI NG VIÊN .Net Framework 3.5 Page 1

Upload: pth-hanh

Post on 03-Mar-2015

234 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

TÀI LI U H NG D N GI NG D YỆ ƯỚ Ẫ Ả ẠDÀNH CHO GI NG VIÊN Ả

.Net Framework 3.5 Page 1

Page 2: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

   Thông tin và mục tiêu khóa học

B giáo trình này đ c biên so n d a trên nh ng tài li u m i nh t v .NETộ ượ ạ ự ữ ệ ớ ấ ề framework 3.5 nh m cung c p cho sinh viên công ngh thông tin nh ng ki n th c cằ ấ ệ ữ ế ứ ơ b n nh t v .NET framework. N i dung bao g m ki n trúc .NET framework, s phátả ấ ề ộ ồ ế ự tri n c a .NET framework qua các phiên b n, ki n trúc phiên b n 3.5, các n i dungể ủ ả ế ả ộ c b n trong phiên b n 3.5... Đ c bi t, giáo trình đi sâu vào ơ ả ả ặ ệ Language Integrated Query (LINQ), Windows Presentation Foundation (WPF) là các công ngh m i r tệ ớ ấ tiêu bi u c a Microsoft .NET nh m cung c p cho sinh viên nh ng kĩ năng c b nể ủ ằ ấ ữ ơ ả nh t đ phát tri n các ng d ng trên n n .NET framework 3.5.ấ ể ể ứ ụ ềNh ng m c tiêu chính mà giáo trình c g ng đ t đ c:ữ ụ ố ắ ạ ượ

1. Cung c p cho sinh viên m t cái nhìn t ng quan v ki n trúc .NET framework,ấ ộ ổ ề ế n m đ c s phát tri n qua t ng phiên b n c a .NET framework, so sánh cácắ ượ ự ể ừ ả ủ phiên b n. ả

2. Giúp sinh viên n m đ c m t s n i dung c b n trong .NET framework 3.5,ắ ượ ộ ố ộ ơ ả s khác bi t c a nó so v i các phiên b n tr c.ự ệ ủ ớ ả ướ

3. H ng d n cho sinh viên các k thu t l p trình c b n v i 2 công ngh quanướ ẫ ỹ ậ ậ ơ ả ớ ệ tr ng là LINQ và WPF.ọ

Vì đ c b c c trong 45 ti t d y nên giáo trình không th đi sâu vào chi ti t t ng n iượ ố ụ ế ạ ể ế ừ ộ dung trong .NET framework mà ch d ng m c gi i thi u các khái ni m c b n nh t.ỉ ừ ở ứ ớ ệ ệ ơ ả ấ Đ i v i phiên b n 3.5, giáo trình xoáy sâu vào 2 n i dung c b n là LINQ và WPF làố ớ ả ộ ơ ả các công ngh th ng g p nh t đ i v i ng i l p trình trên .NET framework 3.5.ệ ườ ặ ấ ố ớ ườ ậ

B giáo trình đ c biên so n và t ng h p bao g m: slide bài gi ng, bài exercise, bàiộ ượ ạ ổ ợ ồ ả th c hành lab và các Video t h c. đây, toàn b giáo trình đ u đ c trình bày b ngự ự ọ Ở ộ ề ượ ằ ti ng Anh, nh m m c đích nâng cao kh năng ti p thu và phát tri n các k năng h cế ằ ụ ả ế ể ỹ ọ và nghiên c u b ng ti ng Anh – các k năng vô cùng quan tr ng đ i v i ng i h cứ ằ ế ỹ ọ ố ớ ườ ọ công ngh thông tin.ệ

Giáo trình có th dùng tham kh o cho các ngành Công ngh thông tin, đi n t , vi nể ả ệ ệ ử ễ thông.

.Net Framework 3.5 Page 2

Page 3: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

   Phương pháp giảng dạy

Khóa h c này yêu c u sinh viên ph i đ c th c hành nhi u b ng các ví d , projectọ ầ ả ượ ự ề ằ ụ th c t đ có kh năng làm th t thay vì ch nghe lý thuy t suông. Giáo viên nên tự ế ể ả ậ ỉ ế ổ ch c các bu i h c lý thuy t và bu i h c làm lab đan xen nhau, lý thuy t mà sinh viênứ ổ ọ ế ổ ọ ế m i h c có th đ c th hi n ngay b ng các bài th c hành. Đi u này giúp cho sinhớ ọ ể ượ ể ệ ằ ự ề viên nh và hi u k h n nh ng gì giáo viên truy n đ t, và cũng tăng s h ng thúớ ể ỹ ơ ữ ề ạ ự ứ trong vi c h c.ệ ọM t ví d v vi c t ch c các bu i h c đã đ c áp d ng:ộ ụ ề ệ ổ ứ ổ ọ ượ ụ

T ch c tu n 3 ti t h c lý thuy t và 1 bu i th c hành:ổ ứ ầ ế ọ ế ổ ự Lý thuy tế

- S l ng ti t: 3 ( có th thay đ i)ố ượ ế ể ổ- Th i gian gi ng slide: t 2 đ n 2.5 ti t tùy vào ch ng và đi u ki n.ờ ả ừ ế ế ươ ề ệ- Th i gian còn l i cho sinh viên nghe các Training Video và ti n hành th oờ ạ ế ả

lu n. ậ Th c hànhự

- Sinh viên th c hành các bài lab c a giáo trình.ự ủ- Giáo viên tìm m t ví d , t t nh t là m t project th c t đ làm thông quaộ ụ ố ấ ộ ự ế ể

các bài lab, h ng d n t ng b c đ sinh viên hi u đ c quá trình làmướ ẫ ừ ướ ể ể ượ th c t .ự ế

K t thúc khóa h c, giáo viên nên yêu c u sinh viên th c hi n nh ng project t ng thế ọ ầ ự ệ ữ ổ ể b ng vi c đ a ra danh sách các m u project đ sinh viên l a ch n, ho c sinh viên tằ ệ ư ẫ ể ự ọ ặ ự đăng ký. Vi c yêu c u này có th đ c th c hi n vào gi a h c kỳ ho c vào cu i kỳ. ệ ầ ể ượ ự ệ ữ ọ ặ ốĐ rèn luy n k năng làm vi c nhóm cho sinh viên, giáo viên có th yêu c u l p phânể ệ ỹ ệ ể ầ ớ chia thành các nhóm sinh viên đ làm các project. Tùy vào đ l n c a project mà quyể ộ ớ ủ đ nh s l ng thành viên c a m t nhóm, s l ng có th giao đ ng t 2 đ n 4 sinhị ố ượ ủ ộ ố ượ ể ộ ừ ế viên. Khi b t đ u th c hi n và trong quá trình th c hi n project, giáo viên c n có m tắ ầ ự ệ ự ệ ầ ặ đ tham gia cùng sinh viên, h ng d n đ sinh viên đi đúng h ng và hi u v n để ướ ẫ ể ướ ể ấ ề m t cách chính xác.ộ

.Net Framework 3.5 Page 3

Page 4: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

   Đề cương môn học

Giáo trình đ c biên so n đ gi ng d y trong 15 tu n, v i th i l ng 3 ti ng m tượ ạ ể ả ạ ầ ớ ờ ượ ế ộ tu n cho ph n lý thuy t và m t bu i th c hành Lab. Trong th i gian h c lý thuy t,ầ ầ ế ộ ổ ự ờ ọ ế vi c đan xen cho sinh viên nghe các bài Trainning Video có th t n khá nhi u th iệ ể ố ề ờ gian. Do đó giáo viên nên cân đ i vi c chia th i gian và ch n l c các bài Video đố ệ ờ ọ ọ ể cho sinh viên nghe và th o lu n trên l p, còn nh ng ph n khác có th giao cho sinhả ậ ớ ữ ầ ể viên v nhà t nghe r i tr l i câu h i c a giáo viên đ bu i sau lên l p trao đ i. ề ự ồ ả ờ ỏ ủ ể ổ ớ ổ

Đ c ng:ề ươ

.NET Overview

Th i gian: ờ 1 bu iổBài gi ng : ả Chapter 1- .NET Overview N i dung : ộ

1.1 Introduction1.2 Overview of the .Net flatform1.3 Overview of the .Net FrameworkSummary

Bài t pậ : Exercise 1

Common Language Runtime

Th i gian: ờ 1 bu iổBài gi ng : ả Chapter 2: Common Language runtimeN i dung : ộ

2.1 Introduction2.2 CLR Executables2.3 CLR in .Net framework 3.5Summary

Bài t pậ : Exercise 2Bài Lab : Lab 2

.Net Framework 3.5 Page 4

Page 5: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

.NET framework 3.5

Th i gian: ờ 1 bu iổ

Bài gi ng : ả Chapter 3: .NET framework 3.5 N i dung : ộ

3.1 Previous Versions3.2 .Net framework 3.5Summary

Microsoft Language Integrated Query

Th i gian: ờ 4 bu iổ

Bài gi ng : ả Chapter 4: Microsoft Language Integrated QueryN i dung : ộ

4.1 Introduction LINQ4.2 C# and VB.NET language enhancements4.3 LINQ building blocks4.4 Querying objects in memory 4.5 Querying relational data4.6 Manipulating XML4.7 Extending LINQ4.8 A look to futureSummary

Bài t pậ : Exercise 4Bài Lab : Lab 4Video training

Windows Presentation Foundation

Th i gian: ờ 4 bu iổ

Bài gi ng: ả Chapter 5: Windows Presentation FoundationN i dung : ộ

5.1 WPF Introduction5.2 XAML5.3 Programming WPF Applications 5.4 Building Your First WPF Application

.Net Framework 3.5 Page 5

Page 6: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

5.5 Exploring the Layout Controls5.6 Working with XAML Controls5.7 Working with Graphics, Media and Animations5.8 New in WPF 3.55.9 Future Directions of WPFSummary

Bài t pậ : Exercise 5Bài Lab : Lab 5Video training

Windows Communication Foundation

Th i gian: ờ 2 bu iổ

Bài gi ng: ả Chapter 6: Windows Communication Foundation N i dung : ộ

6.1 Introduction6.2 Programming Model6.3 New in .NET framework 3.56.4 WCF Web Programming ModelSummary

Bài t pậ : Exercise 6Bài Lab : Lab 6Video training

ASP.NET AJAX

Th i gian: ờ 2 bu iổ

Bài gi ng: ả Chapter 7: ASP.NET AJAXN i dung : ộ

7.1 Introducing ASP.NET AJAX7.2 Microsoft AJAX Library7.3 Working with Web Services7.4 ASP.NET AJAX Control Toolkit7.5 Building Web Application SummarySummary

Bài t pậ : Exercise 7Bài Lab : Lab 7

Video training

.Net Framework 3.5 Page 6

Page 7: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

CH NG 1ƯƠ

.NET overview

Ch ng này cung c p cho sinh viên m t cái nhìn t ng quan v ki n trúc .NETươ ấ ộ ổ ề ế flatform và .Net framework. Sau đó s mô t t ng thành ph n quan tr ng trong ki nẽ ả ừ ầ ọ ế trúc .Net framework nh m giúp cho sinh viên có th hình dung trong đ u các b ph nằ ể ầ ộ ậ c u thành .Net framework đ có th d dàng h n trong l p trình v i công nghấ ể ể ễ ơ ậ ớ ệ Microsoft .Net.K ho ch gi ngế ạ ả

Các n i dung c n truy n t i cho sinh viên:ộ ầ ề ả- Introduction

Introduction Product groups

- Overview of the .Net flatform .NET flatform architecture .NET flatform main components

- Overview of the .NET framework .NET framework design goals Architecture Components Common language runtime Framework base classes Web Services, Web Forms, Windows Forms Language

Đây là ch ng m đ u, gi i thi u m t cách t ng quát v .Net framework. V i giáoươ ở ầ ớ ệ ộ ổ ề ớ trình .Net framework 3.5, không th t p trung vào chi ti t t ng thành ph n c u trúcể ậ ế ừ ầ ấ c a .Net framework mà ch có th cung c p cho sinh viên nh ng khái ni m c b nủ ỉ ể ấ ữ ệ ơ ả nh t đ có th d dàng hình dung khi h c các n i dung c b n trong phiên b n .Netấ ể ể ễ ọ ộ ơ ả ả framework 3.5.

V i m c đích gieo vào đ u sinh viên nh ng hình dung c b n nh t v .Netớ ụ ầ ữ ơ ả ấ ề framework, giáo viên nên d n d t sinh viên b t đ u t vi c gi i thi u s thành côngẫ ắ ắ ầ ừ ệ ớ ệ ự c a công ty Microsoft v i công ngh .Net đ g i trí tò mò, kích thích sinh viên tìmủ ớ ệ ể ợ hi u công ngh .Net. Giáo viên gi i thi u t ng quan v .Net flatform v i các nhómể ệ ớ ệ ổ ề ớ s n ph m ch y u, vai trò và ch c năng c a t ng nhóm s n ph m. Giáo viên nênả ẩ ủ ế ứ ủ ừ ả ẩ demo tr c ti p vi c l p trình v i .Net flatform cho sinh viên th y h ng thú h n và cácự ế ệ ậ ớ ấ ứ ơ sinh viên ch a m t l n ti p xúc v i công ngh .Net d dàng có đ c nh ng ý ni mư ộ ầ ế ớ ệ ễ ượ ữ ệ v l p trình .net.ề ậ

Sau khi gi i thi u .Net flatform giáo viên t p trung vào .Net framework là n i dungớ ệ ậ ộ

.Net Framework 3.5 Page 7

Page 8: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

quan tr ng nh t. ọ ấĐ i v i ph n ố ớ ầ Common language runtime (CLR) c n nh n m nh đây là thànhầ ấ ạ

ph n quan tr ng nh t trong .Net framework. Đ sinh viên có th d dàng hình dungầ ọ ấ ể ể ễ h n, có th trình bày v s so sánh CLR v i các thành ph n t ng ng v i nó trongơ ể ề ự ớ ầ ươ ứ ớ các ngôn ng khác, ví d nh Java Virtual Machine (JVM) trong Java...ữ ụ ư

Đ i v i các thành ph n khác, giáo viên nên ch rõ cho sinh viên xem trong Visualố ớ ầ ỉ Studio nh m giúp cho sinh viên d hi u và h ng thú h n. ằ ễ ể ứ ơPh n Framework base classes, nên ch ra cho sinh viên th y m t s namespace cầ ỉ ấ ộ ố ơ b n nh System, System.Collections, System.IO... Có th ch cho sinh viên th y n iả ư ể ỉ ấ ộ dung các namespace này trong Visual Studio.Ph n Data and XML, có th có nhi u sinh viên ch a đ c làm quen v i các kháiầ ể ề ư ượ ớ ni m v XML, giáo viên có th h ng d n qua khái ni m XML, các thành ph n, cácệ ề ể ướ ẫ ệ ầ x lý trong XML t đó h ng d n sinh viên các namespace x lý XML. T ng t đ iử ừ ướ ẫ ử ươ ự ố v i ph n Data. Giáo viên gi i thích cho sinh viên khái ni m ADO.Net, có th l y ví dớ ầ ả ệ ể ấ ụ c th đ minh h a cho sinh viên.ụ ể ể ọ

Đ i v i ph n Web Services, Web Forms và Window Forms, giáo viên gi i thíchố ớ ầ ả cho sinh viên các khái ni m Web Services, Web Forms, Window Forms, phân tíchệ m t s đ c đi m l p trình c a t ng lo i và h ng d n sinh viên s d ng các h trộ ố ặ ể ậ ủ ừ ạ ướ ẫ ử ụ ỗ ợ c a .Net framework. Giáo viên h ng d n sinh viên th y rõ ủ ướ ẫ ấ Framework base classes và Web Services, Web Forms, Windows Forms trong m t s ví d đ n gi n l p trìnhộ ố ụ ơ ả ậ v i Web Services, Web Forms và Window Forms.ớ

Đ i v i các sinh viên tham gia khóa h c, có th có nh ng sinh viên đã n m đ cố ớ ọ ể ữ ắ ượ các khái ni m c b n v .Net framework nh ng cũng có th có nh ng sinh viên ch aệ ơ ả ề ư ể ữ ư h có ý ni m gì v .Net framework (có th là nh ng sinh viên ch quen l p trình v iề ệ ề ể ữ ỉ ậ ớ Java hay th m chí là Pascal, C, C++...). Giáo viên có th th c hi n bài gi ng b ngậ ể ự ệ ả ằ cách đ t câu h i cho nh ng sinh viên đã bi t tr l i, làm cho nh ng sinh viên nàyặ ỏ ữ ế ả ờ ữ h ng thú h n. Vi c nghe nh ng câu tr l i t nh ng b n đã s d ng .Net có thứ ơ ệ ữ ả ờ ừ ữ ạ ử ụ ể khi n các sinh viên còn l i d dàng ti p thu bài gi ng h n.ế ạ ễ ế ả ơ

Th c hànhự :

Bài t p v nhàậ ề :

Exercise 1.

.Net Framework 3.5 Page 8

Page 9: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

CH NGƯƠ

2Common language runtime

Ch ng này trình bày thành ph n tr ng tâm, đ c ví nh trái tim c a .Net frameworkươ ầ ọ ượ ư ủ là Common language runtime (CLR). Sinh viên s có đ c m t hình dung c th vẽ ượ ộ ụ ể ề cách t ch c, th c thi code trong .Net. Không ch đ n thu n bi t đ n nh ng dòng codeổ ứ ự ỉ ơ ầ ế ế ữ trên nh ng ngôn ng nh C#, VB, VC++ n a mà sinh viên s nhìn th y nh ng gì di nữ ữ ư ữ ẽ ấ ữ ễ ra sau khi b m nút ấ run đ d ch và ch y th ch ng trình.ể ị ạ ử ươ

K ho ch gi ngế ạ ả

Trong ch ng tr c sinh viên đã đ c tìm hi u m t cách t ng quan nh t v .Netươ ướ ượ ể ộ ổ ấ ề framework. Đ n ch ng này, sinh viên s đ c tìm hi u thành ph n quan tr ng nh t,ế ươ ẽ ượ ể ầ ọ ấ đ c ví nh trái tim c a .Net framework là Common language runtime (ượ ư ủ CLR).

N i dung chính c n truy n t i đ n sinh viên:ộ ầ ề ả ế- Khái ni m CLR, vai trò và ch c năng c a nó. Nh n m nh t m quan tr ng c aệ ứ ủ ấ ạ ầ ọ ủ

CLR trong .Net framework.- S th c thi c a CLR:ự ự ủ

Các đo n mã vi t b ng C#, VC++ hay VB s đ c các trình biên d ch d ch raạ ế ằ ẽ ượ ị ị d ng có th th c thi đ c trong windows là exe hay dll tuân theo đ nh d ngạ ể ự ượ ị ạ PE. Trình bày c u trúc đ nh d ng file PE nh n m nh 2 thành ph n là metadataấ ị ạ ấ ạ ầ

và IL (code). Các khái ni m c b n v metadata và IL.ệ ơ ả ề Sau khi tìm hi u v metadata và IL, đ a ra cho sinh viên nh ng khái ni mể ề ư ữ ệ

c b n v ơ ả ề Common Type System và Common Language Specification. S đ quá trình th c thi c a CLRơ ồ ự ủ

Mô t các thành ph n chính trong s đ th c thi:ả ầ ơ ồ ự Class Loader JIT Compiler

- CLR trong phiên b n .Net framework 3.5ả

Đây là ph n t ng đ i khó hi u nên khi gi ng bài, giáo viên nên k t h p v i demo víầ ươ ố ể ả ế ợ ớ d trên Visual Studio. Có th l y ví d tr c ti p trên m t ngôn ng và yêu c u sinhụ ể ấ ụ ự ế ộ ữ ầ viên t tìm hi u trên các ngôn ng khác (Có th làm bài t p v nhà).ự ể ữ ể ậ ề

.Net Framework 3.5 Page 9

Page 10: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

Giáo viên nên gi ng rõ cho sinh viên v ph n ả ề ầ common type system vì đây cũng là m t ph n t ng đ i quan tr ng đ i v i sinh viên khi l p trình. Các n i dung c n nh cộ ầ ươ ố ọ ố ớ ậ ộ ầ ắ đ n trong ph n Common Type System:ế ầ

Value types Reference types Boxing and unboxing Classes, properties, indexers Interfaces Delegates

Th c hànhự :

Lab 2.

Giáo viên h ng d n sinh viên s d ng Visual Studio, Microsoft Window SDK đ làmướ ẫ ử ụ ể bài t p th c hành tìm hi u quá trình th c thi trong .Net framework.ậ ự ể ự

Bài t p v nhàậ ề :

Exercise 2.

.Net Framework 3.5 Page 10

Page 11: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

CH NGƯƠ

3.Net framework 3.5

Ch ng này trình bày các đ c đi m c b n c a các phiên b n .Net framework tr cươ ặ ể ơ ả ủ ả ướ đây (t 1.0 đ n 3.0), sau đó đ a ra s so sánh các phiên b n này v i nhau và v i phiênừ ế ư ự ả ớ ớ b n 3.5. Cu i ch ng s mô t t ng quát các thành ph n trong phiên b n .Netả ố ươ ẽ ả ổ ầ ả framework 3.5.K ho ch gi ngế ạ ảBài gi ng s l n l t đi qua các phiên b n c a .Net framework t 1.0 cho đ n 3.5.ả ẽ ầ ượ ả ủ ừ ế Giáo viên nên tách bài gi ng thành 2 ph n. Ph n đ u là các phiên b n tr c c a .Netả ầ ầ ầ ả ướ ủ framework (t 1.0 đ n 3.0) và ph n sau là phiên b n 3.5. ừ ế ầ ả

Các phiên b n tr c c a .Net framework: ả ướ ủGiáo viên mô t ng n g n t ng phiên b n. Chú ý so sánh các c i ti n c a phiên b nả ắ ọ ừ ả ả ế ủ ả sau so v i phiên b n tr c.ớ ả ướĐ i v i phiên b n 3.0: Nh n m nh đ n các n i dung:ố ớ ả ấ ạ ế ộ

- Windows Presentation Foundation (WPF) - Windows Communication Foundation (WCF) - Windows Workflow Foundation (WF) - Windows CardSpaceĐ i v i các n i dung này, giáo viên c n ch ra nh ng u đi m c a công ngh m i soố ớ ộ ầ ỉ ữ ư ể ủ ệ ớ v i các công ngh hi n có. C n t o ra đ c s thu hút ban đ u đ i v i sinh viên.ớ ệ ệ ầ ạ ượ ự ầ ố ớ

Phiên b n 3.5:ảGiáo viên cho sinh viên xem hình v mô t các b c c i ti n c a phiên b n 3.5 so v iẽ ả ướ ả ế ủ ả ớ các phiên b n tr c. Có th đ t câu h i cho sinh viên xem đâu là các đi m n i b tả ướ ể ặ ỏ ể ổ ậ nh t.ấĐ c bi t chú tr ng vào các n i dung:ặ ệ ọ ộ

- LINQ - ASP.NET AJAX

Trong n i dung LINQ nên mô t l i m t s thao tác thông th ng khi làm vi c v iộ ả ạ ộ ố ườ ệ ớ CSDL, XML... r i nói đ n nh ng u đi m c a LINQ đ sinh viên có th th y rõ nh ngồ ế ữ ư ể ủ ể ể ấ ữ thu n ti n khi s d ng công ngh m i này.ậ ệ ử ụ ệ ớĐ i v i ph n ASP.NET AJAX có th có nh ng sinh viên ch a đ c làm quen v i webố ớ ầ ể ữ ư ượ ớ ho c có nh ng sinh viên đã làm vi c v i môi tr ng web nh ng l i ch a đ c ti pặ ữ ệ ớ ườ ư ạ ư ượ ế xúc v i công ngh AJAX, giáo viên nên gi i thi u s qua v môi tr ng web cũng nhớ ệ ớ ệ ơ ề ườ ư công ngh AJAX, nh ng đi m hay c a công ngh này. Sau đó gi i thi u ASP.NETệ ữ ể ủ ệ ớ ệ AJAX mà .Net framework 3.5 h tr . Đ c bi t nh n m nh đ n nh ng đi m hay c aỗ ợ ặ ệ ấ ạ ế ữ ể ủ

.Net Framework 3.5 Page 11

Page 12: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

công ngh này đ sinh viên có th n m đ c là t i sao nên s d ng ASP.NET AJAXệ ể ể ắ ượ ạ ử ụ mà không ph i là m t công ngh khác.ả ộ ệĐ i v i các đi m m i khác có th ra thành bài t p v nhà đ sinh viên t h c h i, tìmố ớ ể ớ ể ậ ề ể ự ọ ỏ tòi.

Th c hànhự :

Bài t p v nhàậ ề :

.Net Framework 3.5 Page 12

Page 13: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

CH NGƯƠ

4 Language INtegrated Query

Ch ng này trình bày m t công ngh m i trong .Net framework 3.5 Languageươ ộ ệ ớ INtegrated Query (LINQ). LINQ cho phép t o ra các phép toán truy v n gi ng nh cácạ ấ ố ư câu l nh SQL trong các l p c a các ngôn ng .NET nh VB hay C#. LINQ h tr truyệ ớ ủ ữ ư ỗ ợ v n trong các in-memory collections nh arrays, list, XML, DataSet và c s d li uấ ư ơ ở ữ ệ quan h . Tuy nhiên LINQ có th m r ng truy v n t r t nhi u ngu n d li u khácệ ể ở ộ ấ ừ ấ ề ồ ữ ệ nhau. Ch ng này s gi i thi u cho sinh viên m t cái nhìn t ng quát v LINQ, t i saoươ ẽ ớ ệ ộ ổ ề ạ nên s d ng LINQ, h ng d n sinh viên s d ng LINQ truy v n v i Object, Databaseử ụ ướ ẫ ử ụ ấ ớ và XML. Sau khi h ng d n lý thuy t c b n s đ t ra cho sinh viên m t s v n đướ ẫ ế ơ ả ẽ ặ ộ ố ấ ề nâng cao đ giúp sinh viên hi u sâu h n v n i dung đã h c. ể ể ơ ề ộ ọK ho ch gi ngế ạ ảĐây là ch ng chính trong giáo trình v i n i dung khá dài, giáo viên nên tách thành 4ươ ớ ộ ph n. M i ph n s gi ng trong th i gian 3 ti t.ầ ỗ ầ ẽ ả ờ ế

Ph n 1. Gi i thi u LINQ (part 1 đ n part 3 trong giáo trình)ầ ớ ệ ếCác n i dung chính c n truy n t i đ n sinh viên:ộ ầ ề ả ế- Gi i thi u v LINQớ ệ ề

LINQ là gì? T ng quan v LINQ: Nh n m nh đ n 2 khía c nh bao g m: ổ ề ấ ạ ế ạ ồ

LINQ nh m t t p công c (toolset) đ truy v n đ n các ngu n c s dư ộ ậ ụ ể ấ ế ồ ơ ở ữ li u. LINQ cung c p LINQ to Object, LINQ to SQL và LINQ to XML.ệ ấ

LINQ nh s m r ng ngôn ng : C n nh n m nh, LINQ không ph i là m tư ự ở ộ ữ ầ ấ ạ ả ộ ngôn ng m i mà đ c hi u nh là s m r ng c a các ngôn ng đã có.ữ ớ ượ ể ư ự ở ộ ủ ữ Nó đ c tích h p vào trong các ngôn ng nh C# hay VB. ượ ợ ữ ư

Các u đi m c a LINQ: C n nh n m nh vi c nó xóa tan kho ng cách gi aư ể ủ ầ ấ ạ ệ ả ữ Object, c s d li u quan h hay XMLơ ở ữ ệ ệ

T i sao chúng ta nên s d ng LINQ?ạ ử ụ- Các m r ng trên các ngôn ng C# và VB: Trong ph n này giáo viên nên luôn đ aở ộ ữ ầ ư

ra s so sánh gi a hai ngôn ng C# và VB đ sinh viên có th nhìn th y rõ vi cự ữ ữ ể ể ấ ệ m r ng v i LINQ trên hai ngôn ng thông d ng này có gì gi ng và khác nhau.ở ộ ớ ữ ụ ố Giáo viên c n làm th nào cho sinh viên n m đ c c n bi t nh ng gì khi h cầ ế ắ ượ ầ ế ữ ọ LINQ v i m t ngôn ng nào đó. Khi y sinh viên có th d dàng h c v i b t kớ ộ ữ ấ ể ễ ọ ớ ấ ể ngôn ng nào. đây các n i dung chính c n n m đ c khi h c cách s d ngữ Ở ộ ầ ắ ượ ọ ử ụ LINQ v i m t ngôn ng là:ớ ộ ữ Implicitly typed local variables

.Net Framework 3.5 Page 13

Page 14: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

Object initializers Lambda expressions Extension methods Anonymous types

- LINQ building blocks: Các n i dung chính c n truy n t i cho sinh viên trong ph nộ ầ ề ả ầ này bao g m:ồ Standard query operator Query expression Expression tree LINQ DLLs and namespaces

Trong ph n này giáo viên c n h ng d n cho sinh viên các phép toán truy v n thôngầ ầ ướ ẫ ấ d ng, ý nghĩa c a nó. N u sinh viên đã h c qua SQL thì ph n này có th l t nhanhụ ủ ế ọ ầ ể ướ h n, trong tr ng h p sinh viên ch a n m rõ SQL thì giáo viên c n h ng d n k đơ ườ ợ ư ắ ầ ướ ẫ ỹ ể sinh viên có th làm vi c đ c v i các phép toán này. V i nguyên li u là các phépể ệ ượ ớ ớ ệ toán truy v n, giáo viên h ng d n sinh viên cách th c xây d ng m t expression. ấ ướ ẫ ứ ự ộTrong ph n LINQ dlls và các namespaces, giáo viên h ng d n cho sinh viên khiầ ướ ẫ mu n t o m t ng d ng có s d ng LINQ trong Visual Studio thì c n ánh x đ n cácố ạ ộ ứ ụ ử ụ ầ ạ ế dll hay namespace nào.

Trong ph n gi i thi u này, đ sinh viên hình thành ý ni m v LINQ, giáo viên nênầ ớ ệ ể ệ ề demo cho sinh viên m t s ví d nh v s d ng LINQ (có th demo trên 3 ví d mộ ố ụ ỏ ề ử ụ ể ụ ở đ u v LINQ to object, LINQ to SQL và LINQ to XML) trên Visual Studio ho c b ngầ ề ặ ằ video.

Ph n 2. LINQ to Object (part 4 trong giáo trình)ầB t đ u t ph n 2, n i dung gi ng s mang tính th c hành nhi u h n. Nh ng sinhắ ầ ừ ầ ộ ả ẽ ự ề ơ ữ viên đã s d ng qua các ngôn ng .Net đ phát tri n ng d ng có th n m b t n iử ụ ữ ể ể ứ ụ ể ắ ắ ộ dung bài gi ng d h n các sinh viên khác. Trong quá trình gi ng bài giáo viên có thả ễ ơ ả ể đ a ra v n đ , h i nh ng sinh viên đã bi t .Net các gi i pháp đã đ c th c thi tr cư ấ ề ỏ ữ ế ả ượ ự ướ đó, ch ra các h n ch c a nó đ t đó đ a ra gi i pháp m i v i LINQ. Ví d , có thỉ ạ ế ủ ể ừ ư ả ớ ớ ụ ể đ t câu h i: v i các công ngh tr c đây, có th truy v n đ n các object đ cặ ỏ ớ ệ ướ ể ấ ế ượ không? N u có thì làm th nào?ế ếCác n i dung chính c n truy n t i đ n sinh viên:ộ ầ ề ả ế- Có th dùng LINQ đ truy v n nh ng gì? C n nh n m nh cho sinh viên là taể ể ấ ữ ầ ấ ạ

không th dùng LINQ đ truy v n đ c m i th . ( Đi u ki n đ m t object có thể ể ấ ượ ọ ứ ề ệ ể ộ ể đ c truy v n b i LINQ là: Nó thu c ki u collections và implementsượ ấ ở ộ ể IEnumerable<T> interface.)

- M t s collection có th đ c truy v n nh LINQ:ộ ố ể ượ ấ ờ Array Generic lists Generic dictionaries String

.Net Framework 3.5 Page 14

Page 15: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

- S d ng LINQ v i ASP.NET và Windows Forms: Nh n m nh đ n ph n dataử ụ ớ ấ ạ ế ầ bindings cho các ng d ng Web và các ng d ng windows. Có th có nh ng sinhứ ụ ứ ụ ể ữ viên ch a quen v i vi c t o ng d ng web và windows v i .NET, giáo viên có thư ớ ệ ạ ứ ụ ớ ể nh c l i vi c t o các ng d ng web và windows đ sinh viên có th hi u thêmắ ạ ệ ạ ứ ụ ể ể ể đ c ph n này. Đ ng th i giáo viên nên demo cho sinh viên trên Visual Studioượ ầ ồ ờ ho c b ng video.ặ ằ

- M t s phép toán dùng cho truy v n:ộ ố ấ Where Select, select many Distinct aggregate operators Sorting Nested queries Grouping Join

- M t s m r ng:ộ ố ở ộ S d ng LINQ v i nongeneric collectionsử ụ ớ Grouping by multiple criteria Dynamic queries

V i th i l ng c a ti t h c có h n nên giáo viên có th ch c n đ t ra v n đ , g i ýớ ờ ượ ủ ế ọ ạ ể ỉ ầ ặ ấ ề ợ h ng gi i quy t và cho sinh viên t tìm hi u. N u còn th i gian nên cho sinh viênướ ả ế ự ể ế ờ th o lu n.ả ậĐây là ph n mang tính th c hành nhi u nên xen k bài gi ng giáo viên nên cho sinhầ ự ề ẽ ả viên xem nhi u demo đ tăng tính tr c quan.ề ể ự

Ph n 3. LINQ to SQL (part 5 trong giáo trình)ầCác n i dung chính c n truy n t i đ n sinh viên:ộ ầ ề ả ế

- T i sao nên s d ng LINQ to SQL thay vì ADO.net: Giáo viên c n nh n m nh cácạ ử ụ ầ ấ ạ l i th c a LINQ so v i ADO.net ( nh là gi m b t x lý cho h th ng, không c nợ ế ủ ớ ư ả ớ ử ệ ố ầ ph i vi t l i plumbing code...) đ sinh viên th y đ c t i sao nên s d ng LINQ toả ế ạ ể ấ ượ ạ ử ụ SQL. Giáo viên nên l y m t ví d c th , phân tích cách dùng ADO.net đ th yấ ộ ụ ụ ể ể ấ y u đi m c a nó đ sinh viên c m th y h ng thú đ i v i công ngh m i s p h c.ế ể ủ ể ả ấ ứ ố ớ ệ ớ ắ ọ Có th có m t s sinh viên đã n m đ c ADO.net, giáo viên c a th h i ý ki nể ộ ố ắ ượ ủ ể ỏ ế c a h đ tăng tính t ng tác cho bài gi ng.ủ ọ ể ươ ả

- Jump into LINQ to SQL: Đây là ph n h ng d n cách s d ng LINQ to SQL quaầ ướ ẫ ử ụ m t ví d c th . Giáo viên h ng d n sinh viên t l n l t qua các v n đ :ộ ụ ụ ể ướ ẫ ừ ầ ượ ấ ề Đ t v n đ : Giáo viên nêu bài toán – C n li t kê danh sách các quy n sáchặ ấ ề ầ ệ ể

(Book) có giá <$30 và group chúng b ng tiêu đ (subject).ằ ề T o C s d li u: đây ch có m t b ng duy nh t là Bookạ ơ ở ữ ệ Ở ỉ ộ ả ấ T o l p ánh x c s d li u – object (Setting up the object mapping)ạ ậ ạ ơ ở ữ ệ T o l p DataContext (chú ý đ n ph n chu i k t n i, có th có m t s sinh viênạ ậ ế ầ ỗ ế ố ể ộ ố

ch a làm quen v i c s d li u, giáo viên có th h ng d n kĩ h n).ư ớ ơ ở ữ ệ ể ướ ẫ ơ

.Net Framework 3.5 Page 15

Page 16: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

- Đ c d li u t C s d li u v i LINQ to SQLọ ữ ệ ừ ơ ở ữ ệ ớPh n này giáo viên có th demo cho sinh viên qua Visual Studio hay video đ sinhầ ể ể viên th y rõ h n.ấ ơ- Refining our queries: H ng d n sinh viên bi n đ i các câu truy v n b ng cách sướ ẫ ế ổ ấ ằ ử

d ng thêm m t s ti n trình x lý bên phía server. Các n i dung có th gi i thi uụ ộ ố ế ử ộ ể ớ ệ g m có:ồ Filtering Sorting and grouping Aggregation Joining

- When is my data loaded and why does it matter? Lazy loading Loading details immediately

Đây là ph n đ t v n đ sâu h n v i LINQ to SQL đ sinh viên suy nghĩ và tìm tòi. Doầ ặ ấ ề ơ ớ ể th i gian trên l p có h n, giáo viên có th đ t ra v n đ cho sinh viên suy nghĩ vàờ ớ ạ ể ặ ấ ề th o lu n vào bu i sau. Vì đây là ph n đòi h i sinh viên ph i đ c th c hành th c tả ậ ổ ầ ỏ ả ượ ự ự ế r i m i có th n m đ c rõ ràng nên giáo viên nên s d ng làm câu h i v nhà.ồ ớ ể ắ ượ ử ụ ỏ ề- Updating data:

Updating values and committing them to the database Adding and removing items from a table

T ng t nh ph n đ c d li u t c s d li u, ph n này cũng h ng d n m t thaoươ ự ư ầ ọ ữ ệ ừ ơ ở ữ ệ ầ ướ ẫ ộ tác x lý v i C s d li u nên giáo viên có th ti n hành demo b ng visual studioử ớ ơ ở ữ ệ ể ế ằ hay video đ tăng tính hi u qu c a bài gi ng.ể ệ ả ủ ả

- Mapping objects to relational data:Ph n này h ng d n sinh viên m t s cách đ ánh x object và d li u quan h .ầ ướ ẫ ộ ố ể ạ ữ ệ ệ Giáo viên có th đ a ra cho sinh viên m t s l a ch n:ể ư ộ ố ự ọ

Attributes declared inline with your classes External XML files The command-line SqlMetal tool The graphical LINQ to SQL Designer tool

Các l a ch n này cũng có th đ a ra làm bài t p v nhà cho sinh viên tìm hi u. N uự ọ ể ư ậ ề ể ế còn nhi u th i gian, giáo viên nên h ng d n sinh viên m t cách c th ít nh t m tề ờ ướ ẫ ộ ụ ể ấ ộ l a ch n.ự ọ- Advanced database capabilities:Ph n này s h ng d n sinh viên m t s kĩ năng nâng cao v i LINQ to SQL và Cầ ẽ ướ ẫ ộ ố ớ ơ s d li u.ở ữ ệCác n i dung c n truy n đ t bao g m:ộ ầ ề ạ ồ

SQL pass-through: Returning objects from SQL queries Dynamic SQL pass-through Dynamic SQL pass-through with parameters

Working with stored procedures Using a stored procedure to return results Returning a scalar value

.Net Framework 3.5 Page 16

Page 17: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

- M t s n i dung m r ng khác:ộ ố ộ ở ộK t thúc bài gi ng, giáo viên nên g i ý cho sinh viên m t s h ng m r ng, cách sế ả ợ ộ ố ướ ở ộ ử d ng nâng cao v i LINQ to SQL đ sinh viên có th t tìm tòi nghiên c u, tăng thêmụ ớ ể ể ự ứ s h ng thú đ i v i vi c h c và v i các công ngh m i.ự ứ ố ớ ệ ọ ớ ệ ớM t s h ng có th g i ý nh :ộ ố ướ ể ợ ư- Handling concurrency exceptions- Resolving conflicts using transactions- Working with User-defined functions- ...

Ph n 4. ầLINQ to XML (part 6 trong giáo trình) Extending LINQ (part 7 trong giáo trình) A look to future (part 8 trong giáo trình)

Các n i dung chính c n truy n t i đ n sinh viên:ộ ầ ề ả ế

LINQ to XML- Why do we need another XML programming API?Trong ph n này, giáo viên gi i thi u v XML, các API l p trình hi n có v i XML.ầ ớ ệ ề ậ ệ ớM t s sinh viên có th ch a đ c ti p xúc nhi u v i XML. Giáo viên nên gi i thíchộ ố ể ư ượ ế ề ớ ả c n k cách t ch c c a m t file đ nh d ng XML. Đ nh d ng XML có th đem l iặ ẽ ổ ứ ủ ộ ị ạ ị ạ ể ạ nh ng l i ích gì? T i sao XML l i đ c s d ng r ng rãi? T t c nh ng gi i thích nàyữ ợ ạ ạ ượ ử ụ ộ ấ ả ữ ả s giúp sinh viên hi u rõ h n t m quan tr ng c a LINQ to XML.ẽ ể ơ ầ ọ ủCó th l a ch n m t ví d c th đ giúp sinh viên hi u t i sao nên s d ng LINQ toể ự ọ ộ ụ ụ ể ể ể ạ ử ụ XML. Ví d , có th l a ch n so sánh cách x lý XML v i DOM và LINQ to XML.ụ ể ự ọ ử ớ- LINQ to XML class hierarchyGi i thi u v i sinh viên các l p chính đ c đ nh nghĩa trong LINQ to XML API. Giáoớ ệ ớ ớ ượ ị viên có th nh n m nh vào m t s l p chính:ể ấ ạ ộ ố ớ

Xobject Xnode Xcontainer Xelement Xattribute

- Working with XML using LINQSau khi h ng d n sinh viên tìm hi u m t s l p trong LINQ to XML API, giáo viênướ ẫ ể ộ ố ớ h ng d n sinh viên s d ng XML to LINQ trong m t s các thao tác c b n:ướ ẫ ử ụ ộ ố ơ ả

Loading XML Parsing XML Creating XML Creating XML documents Adding content to XML Updating XML content

.Net Framework 3.5 Page 17

Page 18: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

Working with attributes Saving XML

Đây là m t s thao tác c b n th ng g p khi xây d ng các ng d ng x lý v i XML.ộ ố ơ ả ườ ặ ự ứ ụ ử ớ Đ bài gi ng thêm sinh đ ng, giáo viên có th l ng ghép các thao tác này trong m tể ả ộ ể ồ ộ ví d c th , có th demo b ng visual studio ho c video.ụ ụ ể ể ằ ặ

- Query XML with LINQ to XMLNh đã nh c đ n trên, LINQ dùng đ truy v n các ngu n d li u và LINQ to XMLư ắ ế ở ể ấ ồ ữ ệ chính là đ th c hi n m c đích truy v n đ n các d li u đ nh d ng XML. Trongể ự ệ ụ ấ ế ữ ệ ở ị ạ ph n này, c n truy n đ t đ n sinh viên 2 n i dung chính là:ầ ầ ề ạ ế ộ

LINQ to XML axis methods: Gi i thi u cho sinh viên m t s ph ng th c cungớ ệ ộ ố ươ ứ c p cho chúng ta kh năng tìm ki m elements, attributes, và nodes mà chúngấ ả ế ta mu n làm vi c trong XML. Các ph ng th c c b n g m có:ố ệ ươ ứ ơ ả ồ Element Attribute Elements Descendants ElementsAfterSelf, NodesAfterSelf ElementsBeforeSelf NodesBeforeSelf

Standard query operators: Gi i thi u cho sinh viên m t s toán t truy v n cớ ệ ộ ố ử ấ ơ b n đ th c hi n vi c truy v n. M t s toán t quan tr ng c n đ c p đ n baoả ể ự ệ ệ ấ ộ ố ử ọ ầ ề ậ ế g m:ồ Projecting with Select Filtering with Where Ordering and grouping

Querying LINQ to XML objects with XPath: Gi i thi u v i sinh viên cách sớ ệ ớ ử d ng XPath đ truy v n các đ i t ng XML. XPath là m t khái ni m mà có thụ ể ấ ố ượ ộ ệ ể r t nhi u sinh viên ch a đ c ti p xúc. Giáo viên nên gi i thi u qua khái ni mấ ề ư ượ ế ớ ệ ệ XPath là gì, dùng đ làm gì và có l i ích gì. T đó giáo viên l y ví d h ngể ợ ừ ấ ụ ướ d n cách s d ng XPath đ truy v n các đ i t ng XML cho sinh viên. XPathẫ ử ụ ể ấ ố ượ là m t v n đ khá hay, giáo viên có th s d ng nh bài t p v nhà đ sinhộ ấ ề ể ử ụ ư ậ ề ể viên tìm hi u, nghiên c u.ể ứ

Extending LINQSau khi tìm hi u h t các n i dung c b n c a LINQ, ph n này s đ a ra m t s v nể ế ộ ơ ả ủ ầ ẽ ư ộ ố ấ đ m r ng. Giáo viên có th đ t ra m t s v n đ :ề ở ộ ể ặ ộ ố ấ ề- Suggested use cases for LINQ’s extensibility M t s tr ng h p s d ng m r ng c a LINQ. đây có th k m t s tr ng h p:ộ ố ườ ợ ử ụ ở ộ ủ Ở ể ể ộ ố ườ ợ

Querying a custom data source Querying web services Allowing the developers who use your product to take advantage of LINQ

.Net Framework 3.5 Page 18

Page 19: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

Giáo viên có th phân tích tính kh thi và g i ý ý t ng th c hi n cho sinh viên để ả ợ ưở ự ệ ể sinh viên có th t tìm tòi, nghiên c u. Có th l y m t ví d c th đ trình bày choể ự ứ ể ấ ộ ụ ụ ể ể sinh viên: Example - Querying a web service: LINQ to Amazon.- Creating custom query operators

A look to future Đây là ph n trình bày m t s h ng phát tri n trong t ng lai c a LINQ nh m trìnhầ ộ ố ướ ể ươ ủ ằ bày cho sinh viên ti m năng phát tri n c a LINQ đ ng th i có th giúp g i ý h ngề ể ủ ồ ờ ể ợ ướ nghiên c u ti p theo cho nh ng sinh viên có ni m đam mê.ứ ế ữ ềM t s v n đ có th trình bày trong ph n này g m có:ộ ố ấ ề ể ầ ồ- LINQ to XSD, the typed LINQ to XML- PLINQ: LINQ meets parallel computing- LINQ to Entities, a LINQ interface for the ADO.NET Entity Framework

Th c hànhự :

Lab 4.

Bài t p v nhàậ ề :

Exercise 4.

.Net Framework 3.5 Page 19

Page 20: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

CH NGƯƠ

5 Windows Presentation Foundation

Ch ng này trình bày m t công ngh m i đã xu t hi n t .Net framework 3.0 nh ngươ ộ ệ ớ ấ ệ ừ ư v n chi m m t v trí quan tr ng trong .Net framework 3.5. ẫ ế ộ ị ọ Windows Presentation Foundation (WPF) đ a ra m t h ng ti p c n thi t k , xây d ng giao di n t ng tácư ộ ướ ế ậ ế ế ự ệ ươ ng i dùng m i s d ng XAML. Đây là m t công ngh r t m nh, có kh năng t ngườ ớ ử ụ ộ ệ ấ ạ ả ươ tác t t v i ố ớ media, animation và đ ho 2D/3D. Ch ng này s l n l t gi i thi u choồ ạ ươ ẽ ầ ượ ớ ệ sinh viên t ng quan v WPF, XAML, gi i thi u cách l p trình v i WPF, các control,ổ ề ớ ệ ậ ớ layout, đ h a, animation, 2D/3D...ồ ọ K ho ch gi ngế ạ ảĐây là ch ng chính trong giáo trình v i n i dung khá dài, giáo viên nên tách thành 4ươ ớ ộ ph n. M i ph n s gi ng trong th i gian 3 ti t.ầ ỗ ầ ẽ ả ờ ế

Ph n 1. ầWPF Introduction (part 1 trong giáo trình)XAML (part 2 trong giáo trình)

WPF Introduction:Đây là ph n đ u tiên, mang tính ch t gi i thi u s qua v i sinh viên v WPF. Trongầ ầ ấ ớ ệ ơ ớ ề ph n này m c tiêu đ t ra cho giáo viên là ph i giúp sinh viên n m đ c WPF là cáiầ ụ ặ ả ắ ượ gì? Dùng WPF đ làm gì? T i sao nên s d ng WPF ch không ph i là m t côngể ạ ử ụ ứ ả ộ ngh khác? Đ c tr ng c a ng d ng WPF khác v i các ng d ng tr c đó là gì?ệ ặ ư ủ ứ ụ ớ ứ ụ ướ

Các n i dung chính c n truy n t i đ n sinh viên:ộ ầ ề ả ế

- Presentation Layer Architecture: From Yesterday to TomorrowPh n này trình bày v l ch s ki n trúc t ng trình di n c a các ng d ng t tr c đ nầ ề ị ử ế ầ ễ ủ ứ ụ ừ ướ ế nay và các xu h ng ti p theo. Đi m m u ch t giáo viên c n trình bày v i sinh viênướ ế ể ấ ố ầ ớ là: V i ki n trúc Client – Server ph bi n hi n nay, WPF là m t gi i pháp m i, h pớ ế ổ ế ệ ộ ả ớ ấ d n, nên đ c xem xét trong vi c xây d ng giao di n t ng tác ng i dùng trênẫ ượ ệ ự ệ ươ ườ Client. - Windows Presentation Foundation (WPF)

WPF Features and Machinery WPF – Architecture Tools of the Trade

.Net Framework 3.5 Page 20

Page 21: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

Trong ph n này giáo viên gi i thi u cho sinh viên ki n trúc WPF, các đ c đi m c aầ ớ ệ ế ặ ể ủ nó.C n nh n m nh đ n các n i dung quan tr ng s đ c h c trong các ph n ti p theo:ầ ấ ạ ế ộ ọ ẽ ượ ọ ầ ếXAML, control, layout, databinding, media...Trong ph n tools, giáo viên gi i thi u v i sinh viên các công c c n thi t đ có thầ ớ ệ ớ ụ ầ ế ể ể xây d ng ng d ng WPF.ự ứ ụĐ tăng thêm tính h p d n c a công ngh m i đ i v i sinh viên, giáo viên có th choể ấ ẫ ủ ệ ớ ố ớ ể sinh viên xem m t s ng d ng làm theo công ngh WPF đã có. Ví d :ộ ố ứ ụ ệ ụ http://www.microsoft.com/max/

XAML:

Tr c khi h c kĩ h n v WPF, sinh viên nên h c m t n i dung v XAML. Giáo viên cóướ ọ ơ ề ọ ộ ộ ề th gi i thi u v i sinh viên l p trình ng d ng v i WPF s g n ch t v i XAML nhể ớ ệ ớ ậ ứ ụ ớ ẽ ắ ặ ớ ư th nào đ sinh viên có th hi u t i sao c n ph i n m đ c XAML.ế ể ể ể ạ ầ ả ắ ượCác n i dung c n truy n t i đ n sinh viênộ ầ ề ả ế :- What is XAML?- Why do we need XAML?- Working with XAML:

XAML vs. Code Attributes and Events Nesting elements XAML Namespaces Type Converters Property-Element Syntax Markup Extensions The Content Property Nesting rules Naming Elements XAML Code Generation

Giáo viên c n h ng d n sinh viên hi u khái ni m XAML và cách th c hi n m t sầ ướ ẫ ể ệ ự ệ ộ ố thao tác c b n v i XAML. Trong ph n h ng d n cách làm vi c v i XAML giáo viênơ ả ớ ầ ướ ẫ ệ ớ nên demo trên Visual Studio ho c b ng video.ặ ằK t thúc ph n này, m c tiêu đ t ra là sinh viên có th c m th y không l l m v iế ầ ụ ặ ể ả ấ ạ ẫ ớ XAML. Khi chuy n đ n các ph n l p trình v i WPF sinh viên s không b b ng vàể ế ầ ậ ớ ẽ ị ỡ ỡ có th nhanh chóng ti p thu bài gi ng.ể ế ả

Ph n 2. ầProgramming WPF Applications (part 3 trong giáo trình)Building Your First WPF Application (part 4 trong giáo trình)

Sau khi h c ph n gi i thi u và XAML, ph n này s h ng d n sinh viên nh ng b cọ ầ ớ ệ ầ ẽ ướ ẫ ữ ướ c b n đ u tiên l p trình v i WPF.ơ ả ầ ậ ớ

.Net Framework 3.5 Page 21

Page 22: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

Các n i dung c n truy n t i đ n sinh viênộ ầ ề ả ế :- What Are WPF Applications?Ph n này gi i thi u cho sinh viên v các ng d ng WPF. M t đi m c n nh n m nh ầ ớ ệ ề ứ ụ ộ ể ầ ấ ạ ở đây là thay vì các windows forms, ng d ng WPF là m t t p các trang XAML. Trongứ ụ ộ ậ công ngh WPF, các trang XAML đ c thay th cho các windows form. Ta có th v aệ ượ ế ể ừ s d ng các control kéo th v a có th ch nh s a mã XAML.ử ụ ả ừ ể ỉ ử

XAML applications can run in one of two waysTrình bày các cách ch y ng d ng XAML. Có 2 cách là:ạ ứ ụ

XAML browser applications Installed applications

- Windows Presentation Foundation Architecture Gi i thi u 3 thành ph n trong ki n trúc c a WPF là:ớ ệ ầ ế ủ

Presentation Core Presentation Framework Milcore

The major classes that WPF uses: Giáo viên gi i thi u v i sinh viên m t s l pớ ệ ớ ộ ố ớ c b n mà WPF s d ng. Có th ch ra m t s l p nh sau:ơ ả ử ụ ể ỉ ộ ố ớ ư System.Threading.DispatcherObject System.Windows.DependencyObject System.Windows.Media.Visual System.Windows.UIElement System.Windows.FrameworkElement

- How to Program WPF ApplicationsPh n này h ng d n cho sinh viên cách l p trình v i đi u khi n ng d ng.ầ ướ ẫ ậ ớ ề ể ứ ụ

Using the Application ObjectApplication Object là đ i t ng quan tr ng, qu n lý ng d ng c a b n nh m t t pố ượ ọ ả ứ ụ ủ ạ ư ộ ậ h p các trang XAML.ợ

Accessing Properties: Giáo viên h ng d n sinh viên cách truy c p vào cácướ ẫ ậ thành ph n thu c tính c a ng d ng qua Application Object. ầ ộ ủ ứ ụ

Handling Events: Giáo viên h ng d n sinh viên cách “b t” các s ki n liênướ ẫ ắ ự ệ quan đ n ng d ng. Ví d :ế ứ ụ ụ Activated Event Deactivated Event SessionEnding Event Supporting Application-Level Navigation Events:

o Navigatingo NavigationProgresso Navigatedo LoadCompleted

Giáo viên nên h ng d n sinh viên b ng cách demo trên Visual Studio ho c quaướ ẫ ằ ặ video.

Window Management

.Net Framework 3.5 Page 22

Page 23: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

Using the Window Object Using the NavigationWindow Object Using the Page Object

Trình bày cho sinh viên cách s d ng m t s đ i t ng khác trong Windowử ụ ộ ố ố ượ Management.- Building Your First WPF ApplicationPh n này giáo viên demo cho sinh viên cách t o m t ng d ng WPF v i Visualầ ạ ộ ứ ụ ớ Studio. Giáo viên c n gi i thi u cho sinh viên khi nhìn th y tr c quan t ng b c khiầ ớ ệ ấ ự ừ ướ t o m t ng d ng WPF. Sinh viên c n n m đ c các file đ c t o ra khi t o m t ngạ ộ ứ ụ ầ ắ ượ ượ ạ ạ ộ ứ d ng WPF. ụ

Ph n 3. ầExploring the Layout Controls (part 5 trong giáo trình)Working with XAML Controls (part 6 trong giáo trình)

Các n i dung c n truy n đ t cho sinh viên:ộ ầ ề ạExploring the Layout ControlsB n ch t c a WPF là t o giao di n t ng tác ng i dùng nên layout tool là m t ph nả ấ ủ ạ ệ ươ ườ ộ ầ r t quan tr ng.ấ ọM t s ki u layout c b n:ộ ố ể ơ ả- A StackPanel- A DockPanel- A Grid- A Canvas- A WrapPanel

Giáo viên h ng d n sinh viên th y đ c đ c đi m c a t ng lo i, g i ý các tr ngướ ẫ ấ ượ ặ ể ủ ừ ạ ợ ườ h p s d ng t ng lo i panel. Cách truy n đ t t t nh t là giáo viên demo tr c ti p trênợ ử ụ ừ ạ ề ạ ố ấ ự ế Visual Studio ho c video.ặ

Working with XAML Controls

M t ph n r t quan tr ng n a trong ph n thi t k giao di n là các control. đây làộ ầ ấ ọ ữ ầ ế ế ệ Ở các XAML control. Giáo viên c n h ng d n cho sinh viên cách s d ng m t sầ ướ ẫ ử ụ ộ ố control c b n th ng g p nh là:ơ ả ườ ặ ư- Button Control- CheckBox Control- ComboBox ControlGiáo viên nên h ng d n th t c n th n m t vài control. T cách thi t k các thu cướ ẫ ậ ẩ ậ ộ ừ ế ế ộ tính giao di n đ n “b t” các s ki n. Có th h ng d n trên Visual Studio.ệ ế ắ ự ệ ể ướ ẫCh ng h n v i ComboBox Control:ẳ ạ ớ

.Net Framework 3.5 Page 23

Page 24: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

Giáo viên h ng d n sinh viên cách thêm d li u vào trong control. đây cóướ ẫ ữ ệ Ở th s d ng mã XAML. Giáo viên ch cho sinh viên cách xem mã XAML c aể ử ụ ỉ ủ control đ thêm các tùy bi n c a mình vào.ể ế ủ

Giáo viên h ng d n sinh viên cách “b t” m t s s ki n tiêu bi u c aướ ẫ ắ ộ ố ự ệ ể ủ comboBox, ví d :ụ DropDownOpened Event DropDownClosed Event Handling Selection Changes Handling Mouse Moves

Có th có m t s sinh viên ch a n m đ c khái ni m “b t” s ki n, giáo viên nênể ộ ố ư ắ ượ ệ ắ ự ệ gi i thi u qua và ch ra trên ngay trên ví d cách th c thi c a vi c “b t” s ki n.ớ ệ ỉ ụ ự ủ ệ ắ ự ệ

- Performing Data Binding with XAML Controls

Giáo viên trình bày cho sinh viên khái ni m data binding. Đây là m t v n đ khá quanệ ộ ấ ề tr ng trong l p trình ng d ng. Khi ng d ng c a chúng ta làm vi c v i các ngu n dọ ậ ứ ụ ứ ụ ủ ệ ớ ồ ữ li u thì c n ph i binding nó v i các control đ t ng tác v i ng i s d ng. M t sệ ầ ả ớ ể ươ ớ ườ ử ụ ộ ố n i dung c n truy n đ t đ n sinh viên:ộ ầ ề ạ ế

XML BindingBinding t d li u XML. M t đ c tính r t m nh c a binding d li u trong WPF là khừ ữ ệ ộ ặ ấ ạ ủ ữ ệ ả năng binding m t hay nhi u control đ n ngu n d li u XML.ộ ề ế ồ ữ ệ

Object Data Source BindingBinding d li u t c s d li u. Đây là công vi c truy n th ng mà r t nhi u l p trìnhữ ệ ừ ơ ở ữ ệ ệ ề ố ấ ề ậ viên phát tri n ng d ng ph i th c hi n.ể ứ ụ ả ự ệ

Trong ph n này giáo viên nên h ng d n c th cho sinh viên qua Visual Studio hayầ ướ ẫ ụ ể qua video.

Ph n 4. ầWorking with Graphics, Media and Animations (part 7 trong giáo trình)New in WPF 3.5 (part 8 trong giáo trình)Future Directions of WPF (part 9 trong giáo trình)

Các n i dung c n truy n đ t cho sinh viên:ộ ầ ề ạWorking with Graphics, Media and Animations

- Introducing the Graphics APIsWPF cung c p m t th vi n các hàm API h tr các x lý đ h a. Giáo viên h ngấ ộ ư ệ ỗ ợ ử ồ ọ ướ d n cho sinh viên cách s d ng m t s hàm API c b n:ẫ ử ụ ộ ố ơ ả

Brushes Shapes Transformations Imaging Animations

.Net Framework 3.5 Page 24

Page 25: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

- Using MultimediaNh n m nh core c a Multimedia trong WPF n m trong l p MediaElement . Giáo viênấ ạ ủ ằ ớ h ng d n sinh viên cách s d ng l p MediaElement qua m t ví d c th .ướ ẫ ử ụ ớ ộ ụ ụ ể- Working with AnimationĐây là ph n h ng d n cách làm vi c v i animation. Các n i dung c n truy n t i đ nầ ướ ẫ ệ ớ ộ ầ ề ả ế cho sinh viên bao g m:ồ

Understanding the Animation Types Using Keyframe-Based Animation Animations Using Storyboards and TimeLine Classes Working with Animation and Timelines with Interactive Designer Assigning Animations to Events in Interactive Designer

Animation là m t ph n t ng đ i l đ i v i nhi u sinh viên. Giáo viên c n gi i thíchộ ầ ươ ố ạ ố ớ ề ầ ả rõ cho sinh viên các lo i animation, khái ni m keyframe và timeline. Có th g i ý choạ ệ ể ợ sinh viên liên t ng đ n cách làm Flash đ d hình dung h n. Trong phiên b n Visualưở ế ể ễ ơ ả Studio 2008, giáo viên h ng d n sinh viên cách làm vi c v i animation trongướ ẫ ệ ớ Interactive Designer, cách gán các animation cho các s ki n.ự ệGiáo viên có th s d ng m t s n ph m đã chu n b tr c t nhà đ demo cho sinhể ử ụ ộ ả ẩ ẩ ị ướ ừ ể viên th y tính h p d n c a đ c tính h tr animation m nh m c a WPF.ấ ấ ẫ ủ ặ ỗ ợ ạ ẽ ủ

New in WPF 3.5 (part 8 trong giáo trình)

Ph n này s trình bày các đi m m i c a WPF trong .Net framework 3.5. So sánhầ ẽ ể ớ ủ WPF trong phiên b n .Net framework 3.5 v i WPF trong phiên b n .Net frameworkả ớ ả 3.0.M t s nét m i có th gi i thi u v i sinh viên g m có:ộ ố ớ ể ớ ệ ớ ồ

Applications Graphics 3-D Graphics Data Binding Controls Documents Annotations

Trong ph n này giáo viên có th yêu c u sinh viên v nhà tìm hi u thêm các đ cầ ể ầ ề ể ặ đi m m i c a WPF 3.5. Có th yêu c u sinh viên ki m ch ng b ng l p trình th c t ,ể ớ ủ ể ầ ể ứ ằ ậ ự ế cũng có th hình thành các nhóm th c nghi m, ki m tra các đ c đi m m i c a WPFể ự ệ ể ặ ể ớ ủ 3.5.

Future Directions of WPF

Ph n cu i cùng s trình bày m t s h ng phát tri n t ng lai c a WPF. Các n iầ ố ẽ ộ ố ướ ể ươ ủ ộ dung c n trình bày cho sinh viên g m có:ầ ồ- Advantages and Disadvantage WPF

.Net Framework 3.5 Page 25

Page 26: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

Phân tích m t s u đi m và khuy t đi m c a WPF đ t đó d dàng h n trong vi cộ ố ư ể ế ể ủ ể ừ ễ ơ ệ đánh giá các xu th t ng lai c a công ngh này.ế ươ ủ ệ- WPF and Windows VistaWindow Vista là h đi u hành window m i nh t c a Microsoft. Vi c đánh giá WPF vàệ ề ớ ấ ủ ệ Window Vista là m t n i dung c n thi t.ộ ộ ầ ế- WPF and XAML- WPF and SilverlightSilverlight là m t công ngh Là m t plug-in c a trình duy t, Silverlight mang s cộ ệ ộ ủ ệ ứ m nh âm thanh và video c i ti n đ n v i các ng d ng Web. Nó cũng đ c coi là l iạ ả ế ế ớ ứ ụ ượ ờ phúc đáp c a Microsoft v i công ngh Flash đang r t ph bi n c a đ i th Adobe.ủ ớ ệ ấ ổ ế ủ ố ủ WPF và Silverlight liên h m t thi t v i nhau. Ph n gi i thi u Silverlight và WPF sệ ậ ế ớ ầ ớ ệ ẽ giúp sinh viên ti p c n v i m t công ngh m i, đ y ti m năng.ế ậ ớ ộ ệ ớ ầ ề

Th c hànhự :

Lab 5.

Bài t p v nhàậ ề :

Exercise 5.

.Net Framework 3.5 Page 26

Page 27: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

CH NGƯƠ

6 Windows Communication Foundation

Ch ng này trình ươ bày công ngh ệ Windows Communication Foundation (WCF) là m t b công c h tr th c hi n ng d ng theo ki n trúc h ng d ch v ộ ộ ụ ỗ ợ ự ệ ứ ụ ế ướ ị ụ (SOA). WCF đ c xu t hi n t phiên b n 3.0 và cũng gi ng nh WPF nó v n là m tượ ấ ệ ừ ả ố ư ẫ ộ thành ph n quan tr ng trong phiên b n .Net framework 3.5. N i dung c aầ ọ ả ộ ủ ch ng này bao g m gi i thi u v WCF, cách s d ng WCF, trình bày m t sươ ồ ớ ệ ề ử ụ ộ ố đi m m i c a WCF trong phiên b n .Net framework 3.5. ể ớ ủ ảK ho ch gi ngế ạ ảĐây là ch ng có n i dung khá dài, giáo viên nên tách thành 2 ph n. M i ph n sươ ộ ầ ỗ ầ ẽ gi ng trong th i gian 3 ti t.ả ờ ế

Ph n 1. ầIntroduction (part 1 trong giáo trình)Programming Model (part 2 trong giáo trình)

Introduction Các n i dung c n truy n đ t cho sinh viên:ộ ầ ề ạĐây là ph n gi i thi u, giúp sinh viên có đ c cái nhìn t ng quan v WCF. Giáo viênầ ớ ệ ượ ổ ề c n trình bày cho sinh viên các n i dung: WCF là gì? T i sao nên s d ng WCF? L iầ ộ ạ ử ụ ợ ích c a vi c s d ng công ngh này?ủ ệ ử ụ ệ

What is WCF? C n nh n m nh l i cho sinh viên, WCF là m t b công c dùng đ phát tri n nhanhầ ấ ạ ạ ộ ộ ụ ể ể các ng d ng theo ki n trúc h ng d ch v .ứ ụ ế ướ ị ụ

WCF Design Goals Basic conceptions: Trình bày m t s khái ni m c b n trong ki n trúc h ngộ ố ệ ơ ả ế ướ

d ch v c a WCF. Các khái ni m bao g m:ị ụ ủ ệ ồ WCF Clients and Services WCF Message Patterns WCF Messaging and Endpoints Address, Binding, Contract Messaging Runtime

.Net Framework 3.5 Page 27

Page 28: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

C n làm rõ cho sinh viên hi u quá trình truy n message gi a client và server. C uầ ể ề ữ ấ trúc c a message và message runtime.ủ

WCF Communication Protocols: Trình bày các giao th c truy n thông c aứ ề ủ WCF. Nh n m nh WCF có th h tr nhi u giao th c truy n thông: HTTP,ấ ạ ể ỗ ợ ề ứ ề TCP, MSMQ..., h tr encoding đ i v i message.ỗ ợ ố ớ

WCF Architecture: Giáo viên trình bày cho sinh viên ki n trúc c a WCF. Có thế ủ ể cho sinh viên quan sát r i tr l i các thành ph n chính trong ki n trúc. Cu iồ ả ờ ầ ế ố cùng giáo viên đ a ra k t lu n các thành ph n chính trong ki n trúc WCF:ư ế ậ ầ ế WCF Contracts WCF Policies and Bindings WCF Service Runtime WCF Messaging Channels WCF Hosting and Activation

Programming ModelPh n này trình bày mô hình l p trình v i WCF. ầ ậ ớ- From Objects to Services: OO or SOGiáo viên xu t phát t mô hình l p trình h ng đ i t ng (Object –ấ ừ ậ ướ ố ượ Oriented) cho đ n l p trình h ng d ch v (Service – Oriented) đ trình bày cho sinh viên th y đ cế ậ ướ ị ụ ể ấ ặ đi m c a t ng mô hình l p trình, xu th hi n nay.ể ủ ừ ậ ế ệCác mô hình l p trình có th k ra g m có:ậ ể ể ồ

Object-Oriented: v i đ c tr ng là Polymorphism, Encapsulation, Subclassingớ ặ ư Component-Based: v i đ c tr ng là Interface-based, Dynamic Loading,ớ ặ ư

Runtime Metadata Service-Oriented: v i đ c tr ng là Message-based, Schema+Contract, Bindingớ ặ ư

via Policy- WCF ProgrammingPh n này h ng d n cách l p trình v i WCF. Giáo viên nh n m nh các b c l pầ ướ ẫ ậ ớ ấ ạ ướ ậ trình ng d ng v i WCF:ứ ụ ớ

Create a WCF Service Adapt and Configure the Service Contract Run the Service Create a WCF Client Configure the WCF Client Use the WCF Client

V i m i b c, giáo viên nên có nh ng h ng d n b ng hình nh c th ho c demoớ ỗ ướ ữ ướ ẫ ằ ả ụ ể ặ qua Visual Studio hay video.

Ph n 2. ầNew in .NET framework 3.5 (part 3 trong giáo trình)HTTP programming Model (part 4 trong giáo trình)

New in .NET framework 3.5

.Net Framework 3.5 Page 28

Page 29: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

Ph n này trình bày các đi m m i c a WCF trong phiên b n .Net framework 3.5. M tầ ể ớ ủ ả ộ s đ c đi m m i có th k ra nh :ố ặ ể ớ ể ể ư- WCF and WF Integration-Workflow Services- WCF Web Programming Model- WCF Syndication- WCF and Partial Trust- WCF and ASP.NET AJAX Integration- Web Services Interoperability

Giáo viên nên mô t s qua t ng đ c đi m m i trong .Net framework 3.5. Chú ý nh nả ơ ừ ặ ể ớ ấ m nh m t s đi m m i s đ c trình bày k h n trong ph n sau nh : Httpạ ộ ố ể ớ ẽ ượ ỹ ơ ầ ư Programming Model và JSON service.

WCF Web Programming Model

Đây là m t đi m m i trong .Net framework 3.5, cho phép xây d ng các Web-styleộ ể ớ ự services v i WCF. ớGiáo viên chia các n i dung c n truy n đ t cho sinh viên thành 2 ph n:ộ ầ ề ạ ầ- Overview: Đ a ra m t cái nhìn t ng quan v WCF Web Programming Model. Cácư ộ ổ ề

ki n th c chính bao g m:ế ứ ồ Introduction URI Processing with UriTemplate and UriTemplateTable: Giáo viên gi i thíchả

cho sinh viên khái ni m URI, UriTemplate và UriTemplateTable.ệ Service Operation Parameters and URLs WebGet and WebInvoke: Web Programming Model cho phép l p trình viênậ

đi u khi n các m nh l nh bound đ n URI và các ph ng th c HTTP liên quanề ể ệ ệ ế ươ ứ đ n URI này thông qua WebGet and WebInvoke.ế

Formats and the Web Programming Model: m t đ c đi m m i c a Webộ ặ ể ớ ủ Programming Model là có kh năng làm vi c v i r t nhi u ki u d li u khácả ệ ớ ấ ề ể ữ ệ nhau. t ng binding, WebHttpBinding có th đ c và ghi d li u v i các ki uỞ ầ ể ọ ữ ệ ớ ể d li u nh XML, JSON, Opaque binary streams. JSON là m t ki u d li uữ ệ ư ộ ể ữ ệ m i, có th h u h t sinh viên đ u ch a đ c ti p xúc, giáo viên có th gi iớ ể ầ ế ề ư ượ ế ể ớ thi u qua cho sinh viên đ th y đ c m t v n đ m i, h p d n, kích thích sệ ể ấ ượ ộ ấ ề ớ ấ ẫ ự tìm tòi c a sinh viên.ủ

HTTP Programming ModelHTTP Web Programming Model cho phép các l p trình viên phát tri n Windowsậ ể Communication Foundation (WCF) Web services qua các HTTP request c b n màơ ả không c n đ n SOAP. ầ ếTrong ph n này giáo viên gi i thi u cho sinh viên t ng quan v HTTP Webầ ớ ệ ổ ề Programming Model sau đó trình bày m t s l p c b n đ c cung c p trong môộ ố ớ ơ ả ượ ấ hình này:- Programming Model:

WebGetAttribute

.Net Framework 3.5 Page 29

Page 30: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

WebInvokeAttribute WebServiceHost

- Channels and Dispatcher Infrastructure: WebHttpBinding WebHttpBehavior

- Utility Classes and Extensibility Points: UriTemplate UriTemplateTable QueryStringConverter WebHttpDispatchOperationSelector

Sau khi gi ng xong các l p này, giáo viên gi i thi u v i sinh viên m t ví d demo. Vìả ớ ớ ệ ớ ộ ụ th i gian dành cho bài gi ng này là khá ng n mà ti p xúc v i m t công ngh r t m iờ ả ắ ế ớ ộ ệ ấ ớ m nên v n đ đ t ra cho giáo viên là ph i làm cho sinh viên n m đ c WCF là gì?ẻ ấ ề ặ ả ắ ượ n m đ c t t ng l p trình v i WCF, m t s đi m m i trong .Net framework 3.5 đ cắ ượ ư ưở ậ ớ ộ ố ể ớ ặ bi t là HTTP Programming Model. Đây không ph i là công ngh th ng g p nh t đ iệ ả ệ ườ ặ ấ ố v i ng i l p trình viên nên trong khuôn kh 45 ti t c a giáo trình chúng ta không đ tớ ườ ậ ổ ế ủ ặ n ng n i dung này. Tuy nhiên c n ph i cho sinh viên n m đ c cái hay c a côngặ ộ ầ ả ắ ượ ủ ngh đ khi c n thi t sinh viên có th d dàng t tìm tòi, nghiên c u và phát tri n.ệ ể ầ ế ể ễ ự ứ ể

Th c hànhự :

Lab 6.

Bài t p v nhàậ ề :

Exercise 6.

.Net Framework 3.5 Page 30

Page 31: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

CH NGƯƠ

7 ASP.NET AJAX

Ch ng này trình bày m t n i dung m i trong .NET framework 3.5 - ươ ộ ộ ớ ASP.NET AJAX. ASP.Net AJAX cho phép các l p trình viên t o ra nh ng giao di n web v i nh ngậ ạ ữ ệ ớ ữ thành ph n Ajax có th dùng l i đầ ể ạ ư c.ợ Trong đó AJAX là m tộ công c dành cho cácụ l p trình viên mà tr c đây có mã danh là Atlas giúp xây d ng nh ng ng d ng webậ ướ ự ữ ứ ụ d a trên t p ngôn ng Ajax (Asynchronous JavaScript and XML) – b t đ i x ngự ậ ữ ấ ố ứ JavaScript và XML. Ajax ch c h n s tr thành m t n n t ng cho l a ch n phát tri nắ ẳ ẽ ở ộ ề ả ự ọ ể ki n trúc các ng d ng web th h k ti p b i vì công c đó cho phép ng d ngế ứ ụ ế ệ ế ế ở ụ ứ ụ nhanh và m nh h n, đ ng th i thêm thu n l i đ i v i t ng tác ng i s d ng.ạ ơ ồ ờ ậ ợ ố ớ ươ ườ ử ụ N iộ dung ch ng này s giúp sinh viên tìm hi u đ c t ng quan v ASP.NET AJAX, đâuươ ẽ ể ượ ổ ề là ki n trúc c a nó và m t s kĩ thu t l p trình c b n v i ASP.NET AJAX.ế ủ ộ ố ậ ậ ơ ả ớK ho ch gi ngế ạ ảĐây là ch ng có n i dung khá dài, giáo viên nên tách thành 2 ph n. M i ph n sươ ộ ầ ỗ ầ ẽ gi ng trong th i gian 3 ti t.ả ờ ế

Ph n 1. ầIntroducing ASP.NET AJAX (part 1 trong giáo trình)Microsoft AJAX Library (part 2 trong giáo trình)

Introducing ASP.NET AJAX

Ph n này gi i thi u cho sinh viên t ng quan v ASP.NET AJAX. Vì trong kho ng th iầ ớ ệ ổ ề ả ờ gian có h n c a ch ng trình d y, không th gi ng cho sinh viên t ph n ASP.NETạ ủ ươ ạ ể ả ừ ầ nên tr c khi vào n i dung chính giáo viên có th nên gi i thi u qua v ASP.NET đướ ộ ể ớ ệ ề ể sinh viên có th hi u đ c n i dung ch ng này. ể ể ượ ộ ươ

Các n i dung chính c n truy n đ t cho sinh viên:ộ ầ ề ạ- What is Ajax?Gi i thi u cho sinh viên khái ni m AJAX. ớ ệ ệ Ajax là m t k thu t phát tri n web có tínhộ ỹ ậ ể t ng tác cao b ng cách k t h p các ngôn ng : HTML (ho c XHTML) v i CSS trongươ ằ ế ợ ữ ặ ớ vi c hi n th thông tin; Mô hình DOM (ệ ể ị Document Object Model), đ c th c hi n thôngượ ự ệ qua JavaScript, nh m hi n th thông tin đ ng và t ng tác v i nh ng thông tin đ cằ ể ị ộ ươ ớ ữ ượ hi n th , Đ i t ng XMLHttpRequest đ trao đ i d li u m t cách không đ ng b v iể ị ố ượ ể ổ ữ ệ ộ ồ ộ ớ máy ch web. (M c dù, vi c trao đ i này có th đ c th c hi n v i nhi u đ nh d ngủ ặ ệ ổ ể ượ ự ệ ớ ề ị ạ

.Net Framework 3.5 Page 31

Page 32: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

nh HTML, văn b n th ng, JSON và th m chí EBML, nh ng XML là ngôn ngư ả ườ ậ ư ữ th ng đ c s d ng); XML th ng là đ nh d ng cho d li u truy n, m c d u b t cườ ượ ử ụ ườ ị ạ ữ ệ ề ặ ầ ấ ứ đ nh d ng nào cũng có th dùng, bao g m HTML đ nh d ng tr c, văn b n thu nị ạ ể ồ ị ạ ướ ả ầ (plain text), JSON và ngay c EBML. Giáo viên c n nh n m nh cho sinh viên ả ầ ấ ạ Ajax tự nó không ph i là m t công ngh mà là m t thu t ng mô t vi c s d ng k t h pả ộ ệ ộ ậ ữ ả ệ ử ụ ế ợ m t nhóm nhi u công ngh v i nhau.ộ ề ệ ớ- Ajax componentsTrình bày các thành ph n c a AJAX. Chú ý nh n m nh cho sinh viên 4 thành ph nầ ủ ấ ạ ầ chính c a AJAX là:ủ

JavaScript Document Object Model (DOM) Cascading Style Sheets (CSS) XMLHttpRequest

Giáo viên có th gi i thích qua cho sinh viên khái ni m t ng thành ph n. Ví d nênể ả ệ ừ ầ ụ gi i thích cho sinh viên javascript là gì? dùng đ làm gì? CSS là gì?ả ể- Asynchronous web programmingH ng d n sinh viên mô hình t ng tác web browser – server tr c đây và khi dùngướ ẫ ươ ướ AJAX. C n nh n m nh v i sinh viên: ầ ấ ạ ớ Đi m khác bi t c b n nh t c a công nghể ệ ơ ả ấ ủ ệ AJAX là vi c x lý thông tin đ c th c hi n trên máy client thay vì máy server nhệ ử ượ ự ệ ư cách truy n th ng. Máy ch ch làm m t vi c đ n gi n là nh n thông tin t máyề ố ủ ỉ ộ ệ ơ ả ậ ừ khách và tr các d li u v cho máy khách. Máy khách x lý s b thông tin c aả ữ ệ ề ử ơ ộ ủ ng i dùng nh p vào, sau đó chuy n v máy ch r i nh n d li u t máy ch và xườ ậ ể ề ủ ồ ậ ữ ệ ừ ủ ử lý đ hi n th cho ng i dùng.ể ể ị ườ

- ASP.NET AJAX ArchitectureTrình bày cho sinh viên ki n trúc c a ASP.NET AJAX. Chú ý r ng ki n trúc c aế ủ ằ ế ủ ASP.NET AJAX n m c 2 phía Client và Server.ằ ở ả

Client framework Microsoft Ajax Library HTML, JavaScript, and XML Script ASP.NET AJAX service proxies

Server framework ASP.NET AJAX server controls Web services bridge Application services bridge

- Development scenariosGi i thi u 2 k ch b n phát tri n ng d ng:ớ ệ ị ả ể ứ ụ

Client-centric development model Server-centric development model

Phân tích cho sinh viên đi m khác bi t c a 2 k ch b n này, tr ng h p s d ng c aể ệ ủ ị ả ườ ợ ử ụ ủ t ng k ch b n. ừ ị ả- ASP.NET AJAX goalsGi i thi u cho sinh viên các u đi m c a vi c l p trình ASP.NET AJAX giúp sinh viênớ ệ ư ể ủ ệ ậ tăng thêm h ng thú h c t p.ứ ọ ậ

.Net Framework 3.5 Page 32

Page 33: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

Microsoft AJAX Library

Đây là thành ph n chính trong Client Framework. Giáo viên c n gi i thi u v i sinhầ ầ ớ ệ ớ viên các n i dung:ộ- A quick overview of the libraryĐ a ra cái nhìn t ng quan v library. ư ổ ề- Client Library Namespaces: Trình bày t ng quan các namespaces trong library.ổ

Chú tr ng đ n m t s namespaces Sys, Sys.Net...ọ ế ộ ố- Client-Side Event Life Cycle: Trình bày vòng đ i c a s ki n phía client, mô t choờ ủ ự ệ ả

sinh viên t ng b c trong vòng đ i.ừ ướ ờEvent Handling in the Microsoft AJAX Library: H ng d n sinh viên cách b t các sướ ẫ ắ ự ki n trong ệ Microsoft AJAX Library.

Trong ph n đ u này giáo viên nên demo cho sinh viên xem m t vài ng d ng nh sầ ầ ộ ứ ụ ỏ ử d ng ASP.NET AJAX đ tăng tính tr c quan và giúp sinh viên n m bài t t h n trongụ ể ự ắ ố ơ l n đ u tiên ti p xúc v i m t kĩ thu t m i.ầ ầ ế ớ ộ ậ ớ

Ph n 2. ầWorking with Web Services (part 3 trong giáo trình)ASP.NET AJAX Control Toolkit (part 4 trong giáo trình)Building Web Application (part 5 trong giáo trình)

Working with Web Services

G i Web Services là m t ph n r t quan tr ng trong AJAX. Giáo viên c n gi i thi uọ ộ ầ ấ ọ ầ ớ ệ cho sinh viên khái ni m Web Services, t m quan tr ng c a Web Services hi n nay. ệ ầ ọ ủ ệCác n i dung c n truy n đ t đ n sinh viên bao g m:ộ ầ ề ạ ế ồ- IntroductionGi i thi u v i sinh viên v vi c làm vi c v i Web Services qua ASP.NET AJAX. ớ ệ ớ ề ệ ệ ớ- Server-Side OperationsTrình bày các l nh g i Web Services bên phía Server. Giáo viên có th trình bày m tệ ọ ể ộ ví d c th trên Visual Studio hay demo qua video đ sinh viên th y rõ h n.ụ ụ ể ể ấ ơ- Using the ASP.NET Calling Convention- Returning DataASP.NET AJAX h tr làm vi c v i nhi u ki u d li u, t các ki u đ n gi n cho đ nỗ ợ ệ ớ ề ể ữ ệ ừ ể ơ ả ế ph c t p. Giáo viên l y m t vài ví d c th đ sinh viên n m đ c cách làm vi c v iứ ạ ấ ộ ụ ụ ể ể ắ ượ ệ ớ d li u.ữ ệ- Page-Based Web ServicesASP.NET AJAX Control Toolkit

Đây là m t t p các control mà Microsoft cung c p đ làm vi c v i ộ ậ ấ ể ệ ớ Microsoft AJAX Library và AJAX ASP.NET Extensions. Trong đó Microsoft AJAX Library và AJAX

.Net Framework 3.5 Page 33

Page 34: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

ASP.NET Extensions nh là ư core framework còn ASP.NET AJAX Control Toolkit nh làư m t t p các control đ c xây d ng trên framework đ y.ộ ậ ượ ự ấCác n i dung chính c n truy n đ t đ n sinh viên:ộ ầ ề ạ ế- Introduction- Basic Control Usage- Control List: Gi i thi u m t s control c b n.ớ ệ ộ ố ơ ả

Accordion Calendar ConfirmButton

- Creating Your Own Extender Controls: Gi i thi u cách t o extender control. Giáoớ ệ ạ viên có th trình bày m t ví d c th cho sinh viên.ể ộ ụ ụ ể

Building Web Application- Securing Web Applications- Profile ServicesPh n này trình bày m t s v n đ th ng g p khi xây d ng m t ng d ng Web.ầ ộ ố ấ ề ườ ặ ự ộ ứ ụ

Th c hànhự :

Lab 7.

Bài t p v nhàậ ề :

Exercise 7.

.Net Framework 3.5 Page 34

Page 35: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

H ng d n th c hành và bài t pướ ẫ ự ậĐ i v i ph n bài t p, giáo viên ch c n nêu đ bài ng v i m i ch đ trong bài gi ngố ớ ầ ậ ỉ ầ ề ứ ớ ỗ ủ ề ả ho c các ph n ki n th c m r ng yêu c u sinh viên nghiên c u thêm.ặ ầ ế ứ ở ộ ầ ứM t ph n r t quan tr ng trong bài gi ng n a là các video demo. Giáo viên có th tìmộ ầ ấ ọ ả ữ ể ki m trên m ng r t nhi u các đo n video demo. Giáo trình này có đi kèm m t sế ạ ấ ề ạ ộ ố video giúp giáo viên tăng thêm tính tr c quan và h p d n c a bài gi ng. Đây là giáoự ấ ẫ ủ ả trình gi ng d y v công ngh nên vi c demo và th c hành là vô cùng quan tr ng.ả ạ ề ệ ệ ự ọ N u nh ch nói lý thuy t không thì sinh viên r t khó có th ti p thu các v n đ kế ư ỉ ế ấ ể ế ấ ề ỹ thu t, b i v y giáo viên có th không nên đ t n ng v n đ nói lý thuy t và nên gi iậ ở ậ ể ặ ặ ấ ề ế ớ thi u tr c quan b ng video ho c h ng d n trên Visual Studio.ệ ự ằ ặ ướ ẫ

Sau ph n m i bài gi ng, giáo viên c n h ng d n sinh viên ph n th c hành. M t sầ ỗ ả ầ ướ ẫ ầ ự ộ ố bài th c hành m u đ c đi kèm theo giáo án. ự ẫ ượVí d đ i v i ph n LINQ, giáo viên có th cho sinh viên th c hành 3 bài Lab ng v iụ ố ớ ầ ể ự ứ ớ các ph n: ầ

LINQ to Object LINQ to SQL LINQ to XML

M i bài th c hành ph i trình bày cho sinh viên th y đ c m c đích c a bài th cỗ ự ả ấ ượ ụ ủ ự hành, có th nh c l i m t s lý thuy t c b n và h ng d n sinh viên t ng b c m t.ể ắ ạ ộ ố ế ơ ả ướ ẫ ừ ướ ộBài th c hành m u v i LINQ nh sau:ự ẫ ớ ư

Lab 1: LINQ Project: Unified Language Features for Object and

Relational Queries (C# language)

This lab provides an introduction to The LINQ Project. The language integrated query

framework for .NET (codenamed “LINQ”) is a set of language extensions to C# and Visual Basic

and a unified programming model that extends the .NET Framework to offer integrated querying

for objects, databases and XML.

First, you will look at basic LINQ features including the Standard Query Operators and lambda

expressions. Next, you will see how these features can be used against in-memory collections,

connected databases, and XML documents. Finally, you will take a look at the various query

operators available for data manipulation and extraction.

Lab ObjectiveEstimated time to complete this lab: 60 minutes

.Net Framework 3.5 Page 35

Page 36: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

The objective of this lab is to gain a clear understanding of the LINQ project. You will see how

data manipulation can occur on objects in memory, database tables, and XML files. These new

APIs benefit from IntelliSense™ and full compile-time checking without resorting to string-based

queries. This lab will touch on basic LINQ technologies, along with database-specific DLinq and

XML-specific XLinq. A brief look at query operators will be included.

• Using LINQ with In-Memory Collections

• DLinq: LINQ for Connected Databases

• XLinq: LINQ for XML Documents

• Understanding the Standard Query Operators

Exercise 1 – Using LINQ with In­Memory CollectionsNote: Realize that The LINQ Project relies on new keywords and syntax introduced with C# 3.0, but which

is not yet fully understood by Visual Studio 2005. This may cause some features to give incomplete

information or stop functioning entirely; for example IntelliSense™ will not always be correct and error

messages can be confusing. Keep in mind that the IDE support and compiler are preview releases, and still

have many flaws. A consequence is that incorrect code may result in an abundance of error messages. It is

important to address errors top-down, then recompile as spurious errors will often disappear once valid ones

are addressed.

In this exercise, you will learn how to query over object sequences. Any collection supporting

the generic interface System.Collections.Generic.IEnumerable<T> is considered a sequence

and can be operated on using the new LINQ Standard Query Operators. Support is also

included for types defined using System.Collections.IEnumerable so that existing code will work

with LINQ as well. Standard Query Operators allow programmers to construct queries as well as

projections that create new types on the fly. This goes hand-in-hand with type inference, a new

feature that allows local variables to be automatically typed by their initialization expression.

Task 1 – Creating a LINQ Solution1. Click the Start | Programs | Microsoft Visual Studio 2005 Beta 2 | Microsoft Visual

Studio 2005 Beta 2 menu command.

2. Click the Tools | Options menu command

3. In the left hand treeview select Debugger | General

4. In the right hand pane find the option “Redirect all output to the Quick Console

window” and uncheck it

5. Click OK

.Net Framework 3.5 Page 36

Page 37: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

6. Click the File | New | Project… menu command

7. In the New Project dialog, in the Project types list on the left, click Visual C# | LINQ

Preview

8. In the Templates pane on the right, click LINQ Console Application

9. Click OK.

10. At the warning dialog, click OK

Task 2 – Querying a Generic List of Integers11.In Solution Explorer, double click Program.cs

12. Create a new method that declares a populated collection of integers (put this method

in the Program class):

static void NumQuery()

{

var numbers = new int[] { 1, 4, 2, 7, 8, 9 };

}

Notice that the left­hand side of the assignment does not explicitly mention a type.  This 

is possible due to one of the new features of LINQ: the inference of type information, where 

possible, directly by the compiler.  In this case the right­hand side specifies that the type is 

int[]; therefore the type of numbers is inferred to be int[].  This is often convenient for 

initialization expressions because it allows the type name to be specified only once.

13. Add the following code to query the collection for even numbers:

static void NumQuery()

{

var numbers = new int[] { 1, 4, 2, 7, 8, 9 };

var evenNumbers =

from p in numbers

where (p % 2) == 0

select p;

}

In this step the right­hand side of the assignment is a query expression, which is a 

language extension introduced by The LINQ project.  As in the previous step, type inference 

is being used here to simplify the code.  The return type from a query may not be 

.Net Framework 3.5 Page 37

Page 38: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

immediately obvious.  This example is returning 

System.Collections.Generic.IEnumerable<int>, but many queries return structured results 

with no obvious declared type; indeed, sometimes there will be no way to specify the type 

when they are created as anonymous types.  In these cases type inference can be 

particularly useful.

14. Add the following code to display the results:

static void NumQuery()

{

var numbers = new int[] { 1, 4, 2, 7, 8, 9 };

var evenNumbers =

from p in numbers

where (p % 2) == 0

select p;

Console.WriteLine("Result:");

foreach(var val in evenNumbers)

{

Console.WriteLine(val);

}

Console.ReadLine();

}

Notice that the foreach statement has been extended to use type inference as well.  The 

final line, Console.ReadLine(), is used to prevent the console window from disappearing 

until enter is pressed.

15. Finally, add a call to the NumQuery method from the Main method:

static void Main(string[] args)

{

NumQuery();

}

16. Press F5 to launch the application. A console window will appear. As intended all even

numbers are displayed (the numbers 4, 2, and 8 appear in the console output).

17. Press ENTER to exit the application.

.Net Framework 3.5 Page 38

Page 39: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

The call to the Console.ReadLine method prevents the console window from 

disappearing immediately.  In subsequent tasks, this step will not be stated explicitly.

Task 3 – Querying Structured Types1. In this task, you will move beyond primitive types and apply the query features to custom structured

types. Above the Program class declaration, add the following declaration to create a Person class:

class Person

{

public int Age;

public string Name;

}

Notice that there is no declared constructor.  In the past this would require consumers to 

create an instance of the object using the default parameterless constructor and then set the 

fields explicitly as separate statements.

2. Within the Program class declaration, create the following new method:

static void ObjectQuery()

{

var people = new List<Person>() {

new Person { Age = 12, Name = "Bob" },

new Person { Age = 18, Name = "Cindy" },

new Person { Age = 13 }

};

}

There are several interesting things to note about this code block.  First of all, notice that 

the new collection is being populated directly within the curly braces.  That is, even though 

the type is List<T>, not an array, it’s possible to use braces to immediately add elements 

without calling the Add method.  Second, notice that the Person elements are being created 

with a new syntax (known as object initializers).  Even though there is no constructor with 

two parameters for the Person class, it is possible to create objects of that class as 

expressions by setting its fields explicitly inside curly braces.  Finally, notice that there is no 

need to specify every field explicitly, rather only those which need to be set are stated.  For 

.Net Framework 3.5 Page 39

Page 40: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

example, the third element only sets the Age field of the Person.  The Name property will 

retain its default value of null.

3. Next query the collection for teenagers. Add the following query code:

static void ObjectQuery()

{

var people = new List<Person>() {

new Person { Age = 12, Name = "Bob" },

new Person { Age = 18, Name = "Cindy" },

new Person { Age = 13 }

};

var teenagers =

from p in people

where p.Age > 12 && p.Age < 20

select p;

}

4. Finally, output the results with the following code:

static void ObjectQuery()

{

var people = new List<Person>() {

new Person { Age=12, Name="Bob" },

new Person { Age=18, Name="Cindy" },

new Person { Age=13 }

};

var teenagers =

from p in people

where p.Age > 12 && p.Age < 20

select p;

Console.WriteLine("Result:");

foreach(var val in teenagers)

{

Console.WriteLine("> Name = {0}, Age = {1}", val.Name,

val.Age);

}

Console.ReadLine();

}

.Net Framework 3.5 Page 40

Page 41: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

As before, the var keyword is used in the foreach loop yet it is still strongly typed.  

5. Add a call to the ObjectQuery method in the Main method (and remove the call to

NumQuery):

static void Main(string[] args)

{

ObjectQuery();

}

6. Press F5 to debug the application.

Two results are shown.  The first result shows that the name is Cindy, but the second 

result shows no name.  This is the expected output since the Name field of that object was 

never initialized.  As you can see, working with complex types is just as easy as working 

with primitive types using LINQ query expressions.

Exercise 2 – DLinq: LINQ for Connected DatabasesNote: This exercise demonstrates that the same features available for querying in-memory

collections can be applied to databases.

In this exercise, you will learn about DLinq, a new part of ADO.NET that supports Language

Integrated Query, allowing you to query and manipulate objects associated with database

tables. It eliminates the traditional mismatch between database tables and your application’s

domain specific object model freeing you to work with data as objects while the framework

manages the rest.

Task 1 – Working with DLinq7. The first step is to create business objects to model the tables. Right click the

LINQConsoleApplication1 project and then click Add | Existing Item.

To simplify the lab, the Northwind table definitions will be imported from an external file. 

The code is easy to understand, but tedious and error­prone to generate.  Once the 

definitions are in­place accessing the tables is easy. The LINQ Preview contains a program 

(SQLMetal) that can be used to generate these classes automatically.

8. Browse to C:\Program Files\LINQ Preview\Samples\SampleQueries\Northwind.cs

9. Click Add

10. In Program.cs, add a directive to use the nwind namespace at the top of the file:

.Net Framework 3.5 Page 41

Page 42: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

using nwind;

11.In Solution Explorer, double click LINQConsoleApplication1 | Northwind.cs

Notice that the Northwind object inherits from DataContext.  This is not necessary for in­

memory LINQ queries but, in the case of DLinq, it adds additional support for accessing the 

underlying database tables.  

12. Scroll down to the public partial class Category

Each type definition relates to a given database table.  Each column is defined with a 

database datatype, primary/foreign key relationships, identity status and other relevant 

properties for declaratively creating an object model from a database table.  This allows data 

to be retrieved and manipulated consistently from the underlying table, while allowing client 

code to treat it strictly as objects.

Task 2 – Querying using Expressions13. In Program.cs, within the Program class declaration, create the following new method:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

}

This creates a Northwind object that represents the strongly typed connection to the 

database.

14. Each table is now accessed as a property of the db variable. At this point, querying is

identical to the previous exercise. Add the following code to retrieve American customers:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

var matchingCustomers =

from c in db.Customers

where c.Country == "USA"

select c;

}

.Net Framework 3.5 Page 42

Page 43: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

15. Displaying the matching customers is straightforward. Add the following code:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

var matchingCustomers =

from c in db.Customers

where c.Country == "USA"

select c;

foreach(var cust in matchingCustomers)

{

Console.WriteLine("> {0} / {1} / {2}",

cust.CompanyName, cust.ContactName, cust.Country);

}

Console.ReadLine();

}

Of course, at this point the collection of matching customers could just as easily be 

displayed in a list box or printed in a report.  

16. Finally, add a call to the new method in the Main method (and remove the call to

ObjectQuery):

static void Main(string[] args)

{

DatabaseQuery();

}

17. Press F5 to debug the application.

Thirteen results are shown.  These are all of the customers in the Northwind Customers 

table with a Country value of USA.

18. So far, the queries have been primarily based on filtering; however, LINQ supports

many options to query data beyond filtering. For example, to sort the list by ContactName

simply use the orderby clause:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

.Net Framework 3.5 Page 43

Page 44: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

var matchingCustomers =

from c in db.Customers

where c.Country == "USA"

orderby c.ContactName

select c;

foreach(var cust in matchingCustomers)

{

Console.WriteLine("> {0} / {1} / {2}",

cust.CompanyName, cust.ContactName, cust.Country);

}

Console.ReadLine();

}

19. Press F5 to debug the application.

The same thirteen results are shown, but notice that the order is now determined by the 

alphabetical ordering second displayed field, ContactName.

20. It is also possible to use built-in string methods in queries. Modify the where clause as

shown:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

var matchingCustomers =

from c in db.Customers

where c.CompanyName.Contains("Market")

orderby c.ContactName

select c;

foreach( var cust in matchingCustomers)

{

Console.WriteLine("> {0} / {1} / {2}",

cust.CompanyName, cust.ContactName, cust.Country);

}

Console.ReadLine();

}

.Net Framework 3.5 Page 44

Page 45: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

21. Press F5 to debug the application.

The results have been filtered down to just the four rows containing "Market" in the 

CompanyName column.

Task 3 – Querying using the Standard Query Operators22. The query expression syntax shown in previous examples (expressions starting with “from”) is not

the only method of querying data using LINQ. LINQ also introduces various Standard Query

Operators to achieve the same functionality using a more traditional object-centric approach. Modify

the code to use explicit query construction:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

var matchingCustomers =

db.Customers.

Where(c => c.CompanyName.Contains("Market"));

foreach(var cust in matchingCustomers)

{

Console.WriteLine("> {0} / {1} / {2}",

cust.CompanyName, cust.ContactName, cust.Country);

}

Console.ReadLine();

}

The parameter passed to the Where method is known as a lambda expression and the 

syntax for creating it is introduced with C# 3.0.  The "c" becomes the parameter to an 

unnamed method.  The => token separates the parameter assignment from the actual body. 

The c.CompanyName.Contains("Market") expression can be thought to have an implicit 

return statement preceding it.  In DLinq this expression is emitted as an expression tree 

which DLinq uses to construct the equivalent SQL statement at runtime.

23. Press F5 to debug the application.

.Net Framework 3.5 Page 45

Page 46: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

Notice that little has changed in this example.  The query is now calling the Standard 

Query Operators, but the results are the same, as is the procedure for working with the 

results.

24. Aggregates of data can be produced by simply calling the Standard Query Operators

on the result just as you would any other method. Add the following code to determine the

average unit price of all products starting with the letter "A":

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

var matchingCustomers =

db.Customers.Where(c => c.CompanyName.Contains("Market"));

foreach( var cust in matchingCustomers)

{

Console.WriteLine("> {0} / {1} / {2}",

cust.CompanyName, cust.ContactName, cust.Country);

}

var avgCost =

db.Products.

Where(p => p.ProductName.StartsWith("A")).

Select(p => p.UnitPrice).

Average();

Console.WriteLine("Average cost = {0:c}", avgCost);

Console.ReadLine();

}

25. Press F5 to debug the application.

In addition to the customers the results now show the average cost for products starting 

with "A".  If this is read from left to right, it would read as, specify the table (db.Products) 

and restrict the results to those with product names which begin with "A".  This first step, by 

itself, simply returns a filtered result set of Products matching the criteria.  Next, select the 

UnitPrice column which returns a collection of prices, one for each original result.  The final 

method performs an average on the collection of prices and returns a single value.

.Net Framework 3.5 Page 46

Page 47: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

Exercise 3 – XLinq: LINQ for XML documentsNote: XLinq is an in-memory XML cache that takes advantage of Standard Query Operators and

exposes a simplified way to create XML documents and fragments.

In this exercise, you will learn how to read XML documents into the XDocument object, how to

query elements from that object, and how to create documents and elements from scratch.

Task 1 – Adding XLinq Support26. The project template used earlier takes care of adding references and using directives

automatically. In Solution Explorer, expand LINQConsoleApplication1 | References

Notice the System.Xml.XLinq reference.

27. In Program.cs notice the directive to use the XLinq namespace:

using System.Xml.XLinq;

Task 2 – Creating Documents from Scratch28. Creating full-fledged documents from scratch requires instantiating the XDocument object then

appropriate XElement, XAttribute and other entities as required for the document. If only an XML

fragment is needed then just the XElement class can be used. After the Main method, enter the

following code to create a small document containing contact names:

public static XDocument CreateDocument()

{

// create the document all at once

return new XDocument(

new XDeclaration("1.0", null, null),

new XElement("organizer",

new XElement("contacts",

new XElement("contact", new XAttribute("category",

"home"),

new XElement("name", "John Smith")),

new XElement("contact", new XAttribute("category",

"home"),

new XElement("name", "Sally Peters")),

new XElement("contact", new XAttribute("category",

"work"),

new XElement("name", "Jim Anderson")))));

}

29. The simplest action to take is to display the document. After the CreateDocument

method, create a new method, XMLQuery, invoke CreateDocument, then write the

document to the console as follows:

.Net Framework 3.5 Page 47

Page 48: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

public static void XMLQuery()

{

XDocument doc = CreateDocument();

Console.WriteLine(doc);

Console.ReadLine();

}

30. Replace the code in the Main method with a call to XMLQuery():

static void Main(string[] args)

{

XMLQuery();

}

31. Press F5 to debug the application.

As you can see, creating the document required few steps, and can be accomplished in 

a single line of code

32. The next step is to query the document. The Descendants method returns all

descendant elements of the name typed (in this case, contact). The Where method

should be familiar from previous exercises. Add the following code to query for all contact

elements with a category attribute matching "home":

public static void XMLQuery()

{

XDocument doc = CreateDocument();

Console.WriteLine(doc);

var contacts =

from c in doc.Descendants("contact")

where (string)c.Attribute("category") == "home"

select c;

Console.WriteLine("\n\nResults:");

foreach(var contact in contacts)

{

Console.WriteLine("\n{0}", contact);

}

.Net Framework 3.5 Page 48

Page 49: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

Console.ReadLine();

}

33. Press F5 to debug the application.

In addition to the document being displayed, you now also have an XML element 

containing only the two non­work contacts.  This is a departure from DOM programming that 

requires that all elements be part of a document.  This XML element can be considered 

"document­free."

34. XLinq also makes it easy to create new elements from existing elements. This can be

substantially easier than working with XQuey/XPath due to the available C# language

constructs with which you are familiar. Enter the following code to transform the contacts

XML into a list of friends.

public static void XMLQuery()

{

XDocument doc = CreateDocument();

Console.WriteLine(doc);

var contacts =

from c in doc.Descendants("contact")

where (string)c.Attribute("category") == "home"

select c;

Console.WriteLine("\n\nResults:");

foreach(var contact in contacts)

{

Console.WriteLine("\n{0}", contact);

}

XElement transformedElement =

new XElement("friends",

from f in contacts

select new XElement("friend",

new XAttribute("fullname",

(string)f.Element("name"))));

Console.WriteLine("\n\n {0}", transformedElement);

Console.ReadLine();

}

.Net Framework 3.5 Page 49

Page 50: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

35. Press F5 to debug the application.

At first glance the code may appear convoluted, but breaking it down it should appear 

logical.  A new XElement object, friends, is created.  The second argument simply returns a 

collection of XElement objects to be placed beneath the friends element.  The collection is 

the same query used to return all personal contact elements from a few steps ago.  Then, 

instead of simply selecting an item to return, a new XElement object, friend, is created with 

an XAttribute of fullname. 

Task 3 – Using XML Documents with Files36. Documents or elements can easily be saved to and restored from files.

public static void XMLQuery()

{

XDocument doc = CreateDocument();

Console.WriteLine(doc);

var contacts =

from c in doc.Descendants("contact")

where (string)c.Attribute("category") == "home"

select c;

Console.WriteLine("\n\nResults:");

foreach(var contact in contacts)

{

Console.WriteLine("> {0}", contact);

}

XElement transformedElement =

new XElement("friends",

from f in contacts

select new XElement("friend",

new XAttribute("fullname", (string)f.Element("name"))));

Console.WriteLine("\n\n {0}", transformedElement);

transformedElement.Save("XLinqDocument.xml");

.Net Framework 3.5 Page 50

Page 51: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

XDocument doc2 = XDocument.Load("XLinqDocument.xml");

Console.WriteLine("\n\nFrom disk:\n{0}", doc2);

Console.ReadLine();

}

37. Press F5 to debug the application.

Little has changed in the output, except that transformed document is now displayed 

twice.  The second display is from the saved file.  Saving and loading documents requires 

little effort. 

Exercise 4 – Understanding the Standard Query OperatorsNote: LINQ contains approximately thirty different query operators. Only a small sample of them

will be highlighted here, and additional operators can be added programmatically.

In this exercise, you will learn about several of the query operators available for data access and

manipulation. These operators are declared as extension methods on the

System.Query.Sequence type and are known together as the Standard Query Operators.

These operators operate on sequences, that is, any object that implements IEnumerable<T>.

Task 1 – Working with the OfType Operator38. LINQ retains all type information through queries and modifications. The OfType operator can be

used alone to restrict a result set, or in conjunction with other operators. Above the CreateDocument

method, add the following new method:

public static void OperatorQuery()

{

object[] values = {1, "ant", 2, 'x', 3, true, 4};

}

An unlikely collection such as this would be difficult to query.  Having numeric, string, 

character, and Boolean values make any common comparison impossible.

39. The OfType operator restricts a result set to only those values of the given type,

regardless of any other criteria. Add the following code to see a simple restriction query in

this format:

public static void OperatorQuery()

.Net Framework 3.5 Page 51

Page 52: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

{

object[] values = {1, "ant", 2, 'x', 3, true, 4};

var results = values.OfType<int>();

}

40. Now that the results are restricted, the values can be used or simply displayed. Add

the following code to dump the integer results to the console:

public static void OperatorQuery()

{

object[] values = {1, "ant", 2, 'x', 3, true, 4};

var results = values.OfType<int>();

Console.WriteLine("Results:");

foreach( var result in results )

{

Console.WriteLine(result);

}

Console.ReadLine();

}

41. Add a call to the new method in the Main method:

static void Main(string[] args)

{

OperatorQuery();

}

42. Press F5 to debug the application.

Only the int values are displayed.  From here, the results can be further restricted or 

manipulated as needed.

Task 2 – Working with the Min, Max, Sum, and Average Operators43. In the previous exercise, you worked with Northwind database tables to learn how DLinq can work

with databases. You will now return to the DatabaseQuery method to use some additional operators

on the data. Add a call to the method in the Main method:

.Net Framework 3.5 Page 52

Page 53: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

static void Main(string[] args)

{

DatabaseQuery();

}

44. In the DatabaseQuery method, delete most of the body so that it appears thus:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

Console.ReadLine();

}

45. Add the following lines to demonstrate the Min, Max, Sum, and Average operators:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

var minCost = db.Products.Min(p => p.UnitPrice);

var maxCost = db.Products.Select(p => p.UnitPrice).Max();

var sumCost = db.Products.Sum(p => p.UnitsOnOrder);

var avgCost = db.Products.Select(p => p.UnitPrice).Average();

Console.WriteLine("Min = {0:c}, Max = {1:c}, Sum = {2}, Avg =

{3:c}",

minCost, maxCost, sumCost, avgCost);

Console.ReadLine();

}

This example demonstrates how the various aggregate math functions can be applied to 

data.  You may have noticed that there are two signatures for the methods shown.  Min and 

Sum are invoked directly on the db.Products object, while the Max and Average operators 

are chained after Select operators.  The effect is identical.  In the former case the aggregate 

function is applied just to the sequences that satisfy the expression, in the latter case it is 

applied to all the objects. 

.Net Framework 3.5 Page 53

Page 54: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

46. Press F5 to debug the application.

The addition of these operators reduces code complexity considerably.

Task 3 – Working with the Select Operator47. The Select operator is used to perform a projection over a sequence, based on the arguments

passed to the operator. The source data is enumerated and results are yielded based on the selector

function for each element. The resulting collection can be a direct pass-through of the source objects,

a single-field narrowing, or any combination of fields in a new object. In the DatabaseQuery method,

delete most of the body so that it appears thus:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

Console.ReadLine();

}

48. Add the following lines to create a direct projection:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

var productsWithCh =

from p in db.Products

where p.ProductName.Contains("Ch")

select p;

Console.ReadLine();

}

As written, this query will first restrict the source data based on ProductName, then 

select the entire Product.

49. Add the following lines to create a single-value projection:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

.Net Framework 3.5 Page 54

Page 55: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

var productsWithCh =

from p in db.Products

where p.ProductName.Contains("Ch")

select p;

var productsByName =

db.Products.

Where(p => p.UnitPrice < 5).

Select( p => p.ProductName );

Console.ReadLine();

}

This query restricts based on the unit price, then returns a sequence of product names.

50. Add the following lines to create a multi-value projection by using an anonymous type:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

var productsWithCh =

from p in db.Products

where p.ProductName.Contains("Ch")

select p;

var productsByName =

db.Products.

Where(p => p.UnitPrice < 5).

Select( p => p.ProductName );

var productsDetails =

db.Products.

Where(p => p.Discontinued).

Select(p => new {p.ProductName, p.UnitPrice});

Console.ReadLine();

}

The returned type in this example is never declared as a type.  It is created by the 

compiler based on the data types specified.    

.Net Framework 3.5 Page 55

Page 56: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

51. Finally, display the results with the following code:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

var productsWithCh =

from p in db.Products

where p.ProductName.Contains("Ch")

select p;

var productsByName =

db.Products.

Where(p => p.UnitPrice < 5).

Select( p => p.ProductName );

var productsDetails =

db.Products.

Where(p => p.Discontinued).

Select(p => new {p.ProductName, p.UnitPrice });

Console.WriteLine(">>Products containing Ch");

foreach(var product in productsWithCh)

{

Console.WriteLine("{0}, {1}",

product.ProductName, product.ProductID);

}

Console.WriteLine("\n\n>>Products names only");

foreach(var product in productsByName)

Console.WriteLine(product);

Console.WriteLine("\n\n>>Products as new types");

foreach(var product in productsDetails)

{

Console.WriteLine("{0}, {1}",

product.ProductName, product.UnitPrice);

}

Console.ReadLine();

}

.Net Framework 3.5 Page 56

Page 57: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

52. Press F5 to debug the application and view the results

Task 4 – Working with the Where Operator53. The Where operator filters a sequence of values based on a predicate. It enumerates the source

sequence yielding only those values that match the predicate. In the DatabaseQuery method, delete

most of the body so that it appears thus:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

Console.ReadLine();

}

54. The Where operator can filter based on any predicate. Enter the following code to filter

the employee based on birthdate:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

var janBirthdays =

db.Employees.

Where(e => e.BirthDate.Value.Month == 1);

foreach(var emp in janBirthdays)

{

Console.WriteLine("{0}, {1}", emp.LastName, emp.FirstName);

}

Console.ReadLine();

}

55. Press F5 to debug the application and view the results

Task 5 – Working with the Count Operator56. The Count operator simply returns the number of elements in a sequence. This can be applied to

the collection itself, or chained to other operators such as Where to count a restricted sequence. In the

DatabaseQuery method, delete most of the body so that it appears thus:

.Net Framework 3.5 Page 57

Page 58: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

Console.ReadLine();

}

57. Add the following code to count the number of elements in the Customers table:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

int before = db.Customers.Count();

int after = db.Customers.Where(c => c.City == "London").Count();

int after2 = db.Customers.Count(c => c.City == "London");

Console.WriteLine("Before={0}, After={1}/{2}",

before, after, after2);

Console.ReadLine();

}

Notice that the restriction can occur prior to Count being invoked.  It can also take effect 

directly within the call to Count.  

58. Press F5 to debug the application and view the results

Task 6 – Working with the All and Any Operators59. The All and Any operators check whether any or all elements of a sequence satisfy a condition.

The Any operator returns as soon as a single matching element is found. In the DatabaseQuery

method, delete most of the body so that it appears thus:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

Console.ReadLine();

}

.Net Framework 3.5 Page 58

Page 59: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

60. Like the Count operator, the All and Any operators can be invoked on any condition,

and can further restrict their scope by passing a predicate directly in the invocation. Add

the following code to demonstrate both operators:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

var cust1 = db.Customers.Where(c => c.Orders.Any());

var cust2 =

db.Customers.

Where(c => c.Orders.All(o => o.Freight < 50));

foreach( var cust in cust1 )

Console.WriteLine("{0}", cust.ContactName);

Console.WriteLine("-----");

foreach( var cust in cust2 )

Console.WriteLine("{0}", cust.ContactName);

Console.ReadLine();

}

In this case, the Any operator is used within the Where operator of another expression. 

This is perfectly legal as the operator is still being called on a sequence, c.Orders.  This is 

used to return a sequence of all customers who have placed any orders.  The All operator is 

used to return customers whose orders have all had freight costs under $50.

61. Press F5 to debug the application and view the results

Task 7 – Working with the ToArray and ToList Operators62. The ToArray and ToList operators are convenience operators designed to convert a sequence to a

typed array or list, respectively. In the DatabaseQuery method, delete most of the body so that it

appears thus:static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

.Net Framework 3.5 Page 59

Page 60: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

Console.ReadLine();

}

63. These operators are very useful for integrating queried data with existing libraries of

code. They are also useful when you want to cache the result of a query. Start by creating

a sequence:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

var customers = db.Customers.Where(c => c.City == "London");

Console.ReadLine();

}

Note that the sequence could even be as simple as db.Customers.  Restricting the 

results is not a necessary component to use ToArray or ToList.

64. Next, simply declare an array or List collection, and assign the proper values using the

appropriate operator:

static void DatabaseQuery()

{

Northwind db = new Northwind(

@"C:\Program Files\LINQ Preview\Data\Northwnd.mdf");

var customers = db.Customers.Where(c => c.City == "London");

Customer[] custArray = customers.ToArray();

List<Customer> custList = customers.ToList();

Console.ReadLine();

}

.Net Framework 3.5 Page 60

Page 61: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

Lab Summary

In this lab you performed the following exercises.

• Using LINQ with In-Memory Collections

• DLinq: LINQ for Connected Databases

• XLinq: LINQ for XML Documents

• Understanding the Standard Query Operators

You saw how the LINQ framework and features seamlessly tie together data access and

manipulation from a variety of sources. LINQ allows you to work with in-memory objects with

the power of SQL and the flexibility of C#. DLinq further builds on this support to link your

objects to database tables with little extra effort. Finally XLinq brings XML query abilities with

the features of XPath, but the ease of C#. The large collection of standard query operators

offers built-in options for data manipulation that would have required extensive custom code in

the past. Using the LINQ additions to C#, querying and transforming data in a variety of formats

is easier than ever.

.Net Framework 3.5 Page 61

Page 62: Teaching Guide 5462

.Net framework 3.5 Tr ng Đ i H c Bách Khoa Hà N iườ ạ ọ ộ

K t lu nế ậ

Công ngh .NET c a Microsoft là m t công ngh m nh m và liên t c đ c phátệ ủ ộ ệ ạ ẽ ụ ượ tri n. .NET framework là cái lõi n n t ng đ làm vi c v i .NET nên đây là m t n iể ề ả ể ệ ớ ộ ộ dung r t quan tr ng, c n đ c gi i thi u r ng rãi v i sinh viên công ngh thông tin vàấ ọ ầ ượ ớ ệ ộ ớ ệ các ngành khác có liên quan.Giáo trình .NET framework 3.5 ch đ c so n cho th i gian 45 ti t trong khi các n iỉ ượ ạ ờ ế ộ dung trong đó có th tách thành các khóa h c riêng bi t, ví d nh LINQ hay WPF,ể ọ ệ ụ ư WCF... Chính b i v y giáo trình không th đi h t các n i dung quan tr ng c a .NETở ậ ể ế ộ ọ ủ framework mà ch mang tính ch t gi i thi u cho sinh viên m t s kĩ năng c b n ngỉ ấ ớ ệ ộ ố ơ ả ứ v i m t s công ngh n i b t c a .NET framework 3.5. N u có đi u ki n, giáo viênớ ộ ố ệ ổ ậ ủ ế ề ệ nên tách m t s ph n quan tr ng trong .NET framework 3.5 thành các giáo trình riêngộ ố ầ ọ nh LINQ, WPF, WCF, ASP.NET AJAX hay đ a thêm vào m t s công ngh khác như ư ộ ố ệ ư WF, CardSpace...Vì th i gian th c hi n b giáo trình còn h n ch và đây ch là version đ u tiên nênờ ự ệ ộ ạ ế ỉ ầ trong giáo trình v n còn nhi u thi u sót. Trong th i gian t i chúng tôi s c g ngẫ ề ế ờ ớ ẽ ố ắ hoàn thi n giáo trình h n n a. R t mong nh n đ c các ý ki n đóng góp c a t t cệ ơ ữ ấ ậ ượ ế ủ ấ ả m i ng i.ọ ườ

.Net Framework 3.5 Page 62