[PDF] Chapter 5 Truy Xuất Dữ Liệu Với LINQ - te

Search
  • Categories
  • Top Downloads
  • Login
  • Register
  • Search
  • Home
  • 5_Truy xuat du lieu voi LINQ
5_Truy xuat du lieu voi LINQ April 26, 2018 | Author: Anonymous | Category: N/A DOWNLOAD PDF Share Embed Report this link

Short Description

Download 5_Truy xuat du lieu voi LINQ...

Description

Chapter 5 Truy xuất dữ liệu với LINQ NỘI DUNG  Biến cục bộ kiểu ngầm định (Implicitly Typed Local Variables)  Lớp/Kiểu “tạm thời” (Anonymous types)  Phương thức mở rộng (Extension Methods)  Biểu thức Lambda (Lambda Expressions)  Truy cập dữ liệu với LINQ BIẾN CỤC BỘ KIỂU NGẦM ĐỊNH Công dụng:  Khai báo các biến dùng tạm  Khai báo biến lưu kết quả trả về của LINQ (trong những trường hợp ta kg biết trước kiểu dữ liệu trả về) Khai báo: dùng từ khóa var Ví dụ: var i=32;// sau khi khai báo phải khởi tạo giá trị ngay var intArr = new[] { 1, 2, 3, 4 }; BIẾN CỤC BỘ KIỂU NGẦM ĐỊNH Đặc điểm: Strongly Typed Data • Giá trị khởi tạo phải thuộc một kiểu dữ liệu: var d = new[] { 1, "one", 2, "two", false } // Error! Mixed types!: • Không thể gán lại một giá trị không cùng kiểu với giá trị trước var s = "This variable can only hold string data!"; s = "This is fine...";// ok s = 44; // Error! Không nên lạm dụng var để khai báo biến cục bộ, có thể gây khó hiểu, nhầm lẫn và khó debug. ; LỚP/KIỂU TẠM THỜI Công dụng: cho phép tạo ra các class dùng tạm thời mà không cần phải định nghĩa class đó trước. Đặc điểm: • Không chứa phương thức, sự kiện • Sử dụng cục bộ trong một ứng dụng • Tất cả thuộc tính là Readonly, vì vậy sau khi khởi tạo thì không thể sửa đổi • Dùng var để khai báo LỚP/KIỂU TẠM THỜI Ví dụ: PHƯƠNG THỨC MỞ RỘNG (Chapter 13 Pro) Công dụng: cho phép “thêm” phương thức vào một lớp hiện có mà không cần thừa kế, biên dịch lại, hoặc sửa đổi mã nguồn gốc. • Sử dụng phổ biến trong LINQ Đặc điểm:  Hàm cần thêm vào phải là hàm static  Hàm cần thêm vào phải đặt trong một lớp static PHƯƠNG THỨC MỞ RỘNG Đặc điểm:  Kiểu dữ liệu của tham số đầu tiên sẽ tương ứng với kiểu dữ liệu cần thêm vào.  Từ khoá this phải đặt ở tham số đầu tiên  Để sử dụng, thì class chứa các phương thức mở rộng phải visible trong ngữ cảnh cần sử dụng (dùng using…) PHƯƠNG THỨC MỞ RỘNG Ví dụ: PHƯƠNG THỨC MỞ RỘNG Khi hai phương thức mở rộng có cùng dấu hiệu (signature), thì các phương thức phải được gọi thực hiện theo cách gọi thực hiện một phương thức static PHƯƠNG THỨC MỞ RỘNG Khi hai phương thức mở rộng có cùng dấu hiệu (signature), thì các phương thức phải được gọi thực hiện theo cách gọi thực hiện một phương thức static BIỂU THỨC LAMBDA • Là một executable expression • Có thể chuyển sang expression tree • Sử dụng thuận lợi hơn phương thức nặc danh. • Nơi nào có Delegate và phương thức nặc danh thì có thể dùng biểu thức Lambda • Ví dụ: BIỂU THỨC LAMBDA Cú pháp: ([parameter list]) => statements; parameter list: danh sách các tham số truyền vào (luôn được xem là tham tri) Ví dụ: In các phần tử của mảng ra màn hình BIỂU THỨC LAMBDA Ví dụ: Viết biểu thức tính (x+2)^y delegate int del(int i, int j); static del doIt = (x, y) => { x = x + 2; return Convert.ToInt32(Math.Pow(x, y));}; int j = doIt(5, 2); Có nghĩa? doIt thay thế tên hàm  khi gọi doIt(5,2) delegate int del1(int i); static del1 doIt1 = (x) => { ?? Tự viết}; int j = doIt1(5); • Có thể rút gọn static del1 doIt1 = x vì có 1 tham số. BIỂU THỨC LAMBDA Ví dụ: Đoạn code bên dưới làm gì? BIỂU THỨC LAMBDA Tập hợp các Fun delegate của .Net Framework Class Library (FCL): Func Func Func Func Func Ý nghĩa các tham số: T, T1, T2.. : Generic parameter type (Kiểu dữ liệu của các tham số đầu vào) TResult: kiểu dữ liệu trả về của delegate BIỂU THỨC LAMBDA Ví dụ: Sử dụng Lambda Expression để mã hóa một chuỗi: BIỂU THỨC LAMBDA Ví dụ: Sử dụng Lambda Expression để mã hóa một chuỗi: string cryptText = EncryptString(“IBM”, 1, encryptAlgorithm); BIỂU THỨC LAMBDA Biểu thức Lambda có thể sử dụng các biến cục bộ, tham số của phương thức đã định nghĩa nó. TRUY CẬP DỮ LIỆU VỚI LINQ • Data has become more complex, with an ever-increasing number of systems and libraries for accessing those systems. • Developer must learn how to use a multitude of libraries to figure out how to access this data • We have ADO.NET, which is broken down into multiple providers (ODBC, OleDB, SQL, Oracle, and so on) TRUY CẬP DỮ LIỆU VỚI LINQ • Truy vấn dữ liệu từ các nguồn dữ liệu theo mô hình hướng đối tượng bằng chính ngôn ngữ lập trình (không lệ thuộc ngôn ngữ của hệ quản trị CSDL) • Truy vấn dữ liệu các mảng, tập hợp, XML.. • Các lớp hỗ trợ LINQ thuộc các không gian tên:System.Linq, System.Linq.Expressions TRUY CẬP DỮ LIỆU VỚI LINQ • Lập trình truy vấn dữ liệu theo phương pháp truyền thống  tiềm ẩn nhiều lỗi TRUY CẬP DỮ LIỆU VỚI LINQ Mục tiêu thiết kế của LINQ: • Thống nhất cú pháp ngôn ngữ truy vấn trên các loại dữ liệu (objects, relational data, XML) • Truy vấn dữ liệu bằng ngôn ngữ lập trình • Hạn chế lỗi (phát hiện lỗi ở thời điểm biên dịch) TRUY CẬP DỮ LIỆU VỚI LINQ Mục tiêu thiết kế của LINQ: • Hổ trợ người lập trình khi viết các câu truy vấn(IntelliSense support) • Hỗ trợ gở rối (debug) • Tương thích hoàn toàn với những công nghệ khác (standard and generic collections, data binding, web and Windows Forms controls) TRUY CẬP DỮ LIỆU VỚI LINQ LINQ providers: TRUY CẬP DỮ LIỆU VỚI LINQ Các thành phần cơ bản của LINQ: • Sequences: Các đối tượng đã hiện thực interface IEnumerable (Array, List..) • Elements: Các phần tử trong sequence TRUY CẬP DỮ LIỆU VỚI LINQ Các thành phần cơ bản của LINQ: • Query Operators: các phương thức mở rộng thực hiện các thao tác trên câu lệnh LINQ(trong System.linq.Enumerable có khoảng 40 operators) • Query Expression: Ngôn ngữ truy vấn tích hợp cho phép thực hiện các truy vấn trên dữ liệu TRUY CẬP DỮ LIỆU VỚI LINQ Ví dụ: • Query Operators: • Query Expression: TRUY CẬP DỮ LIỆU VỚI LINQ Lưu ý: Một số toán tử trong Query Operators không được hỗ trợ trong Query expression, vì vậy trong một số trường hợp ta phải gọi trực tiếp các Query Operators TRUY CẬP DỮ LIỆU VỚI LINQ Danh sách các toán tử chuẩn (standard operators): TRUY CẬP DỮ LIỆU VỚI LINQ Danh sách các toán tử chuẩn: TRUY CẬP DỮ LIỆU VỚI LINQ Danh sách các toán tử: LINQ và ĐỐI TƯỢNG (OBJECT) Cú pháp cơ bản: giống như SQL, LINQ cũng có các lệnh from, where, select, join, group by, và order by LINQ và ĐỐI TƯỢNG (OBJECT) Cú pháp Query Expression: LINQ và ĐỐI TƯỢNG (OBJECT) Filter: Where • Query Operator: • Query Expression LINQ và ĐỐI TƯỢNG (OBJECT) Indexed filtering: Toán tử Where nhận một tham số thứ 2(optional) kiểu int. Tham số này cho biết vị trí của phần tử trong sequense LINQ và ĐỐI TƯỢNG (OBJECT) Filter: Contains LINQ và ĐỐI TƯỢNG (OBJECT) Filter: Take, Skip • Take: Lấy n phần tử đầu tiên • Skip: bỏ n phần tử đầu tiên LINQ và ĐỐI TƯỢNG (OBJECT) Filter: TakeWhile, SkipWhile • TakeWhile: Lấy các phần tử cho đến khi điều kiện sai • SkipWhile: bỏ qua phần tử cho đến khi điều kiện sai thì lấy dữ liệu LINQ và ĐỐI TƯỢNG (OBJECT) Distinct: trả về dãy các phần tử lấy từ sequence sau khi đã bỏ các phần tử trùng LINQ và ĐỐI TƯỢNG – Data LINQ và ĐỐI TƯỢNG – ordering LINQ và ĐỐI TƯỢNG – grouping LINQ và ĐỐI TƯỢNG – join LINQ và ĐỐI TƯỢNG – join LINQ và ĐỐI TƯỢNG – Aggregate Operators LINQ và ĐỐI TƯỢNG – SelectMany SelectMany: Nối các dãy con(subsequences) kết quả thành một dãy (sequence) Ví dụ: Ta có một mảng Books[], mỗi book gồm có nhiều thuộc tính (Xem SampleData trong LinqBooks.Common) LINQ và ĐỐI TƯỢNG – SelectMany Để lấy danh sách tên các tác giả của các quyển sách: LINQ và ĐỐI TƯỢNG – SelectMany Ví dụ: LINQ và SQL - DataContext LINQ to SQL: cho phép truy vấn dữ liệu quản lý bởi SQL SERVER DataContext: Định nghĩa các thực thể (Entities), từ đó ta có thể truy vấn dữ liệu. Các thực thể: • Ánh xạ đến các bảng quan hệ (Tables) • Chuyển đổi giữa các câu lệnh LINQ và câu lệnh SQL để gửi đến CSDL LINQ và SQL - DataContext DataContext: là thành phần chính của LINQto-SQL LINQ và SQL - DataContext • Để sử dụng Linq to SQL trước hết phải tạo DataContext. • DataContext có thể tạo bằng code hoặc sử dụng tool hỗ trợ bởi Visual Studio (Đọc tài liệu “C# 3.0 Unleashed” trang 446-448) LINQ và SQL – Truy vấn dữ liệu với DataContext • Giả sử ở bước trên ta tạo một DataContext có tên Hospital thì một lớp có tên HospitalDataContext được tạo ra. Đồng thời cũng tạo ra 2 class để nắm dữ 2 thực thể như trong hình. • Để truy vấn dữ liệu ta phải tạo một instance của lớp này LINQ và SQL – Truy vấn dữ liệu với DataContext • Việc truy vấn dữ liệu thông qua DataContext tương tự như truy vấn với Collection. • Thêm mẫu tin: LINQ và SQL – Truy vấn dữ liệu với DataContext • Cập nhật dữ liệu. • Phải gọi thêm hospitalCtx.SubmitChanges() • Xóa mẫu tin: • Phải gọi thêm hospitalCtx.SubmitChanges() LINQ và SQL – Truy vấn dữ liệu với DataContext • Giả thiết có table xyz(a,b) hêm 1 objects (add new row) Cách 1: var HospitalCTX = new HospitalDataContext(); HospitalCTX.xyzs.InsertOnSubmit(new xyz { a = txtA.Text, b = txtB.Text ; HospitalCTX.SubmitChanges(); Cách 2: ar HospitalCTX = new HospitalDataContext(); xyz obj = new xyz(); obj.a = txtA.Text; obj.b = txtB.Text; HospitalCTX.xyzs.InsertOnSubmit(obj); HospitalCTX.SubmitChanges(); LINQ và SQL – Truy vấn dữ liệu với DataContext • Giả thiết có table xyz(a,b) óa 1 objects (delete 1 row) Cách 1: HospitalDataContext HospitalCTX = new HospitalDataContext(); IQueryable xyzdelete= from mm in HospitalCTX.xyzs where mm.a =txtA.Text select mm; HospitalCTX.xyzs.DeleteOnSubmit(xyzdelete.First()); HospitalCTX.SubmitChanges(); Cách 2: ar HospitalCTX = new HospitalDataContext(); xyz obj = HospitalCTX.xyzs.Where(mm => mm.a == xtA.Text).FirstOrDefault(); HospitalCTX.xyzs.DeleteOnSubmit(obj); HospitalCTX.SubmitChanges(); LINQ và SQL – Truy vấn dữ liệu với DataContext • Giả thiết có table xyz(a,b) ửa 1 objects (edit 1 row) Cách 1: HospitalDataContext HospitalCTX = new HospitalDataContext(); IQueryable xyzUpdate= from mm in HospitalCTX.xyzs where mm.a ==txtA.Text select mm; xyzUpdate.First().b =txtB.Text ; HospitalCTX.SubmitChanges(); Cách 2: var HospitalCTX = new HospitalDataContext(); xyz obj = HospitalCTX.xyzs.Where(nn => nn.a == xtA.Text).FirstOrDefault(); obj.b = txtB.Text; HospitalCTX.SubmitChanges(); LINQ và SQL – Truy vấn dữ liệu với DataContext Tạo StoreProcedure trong SQL CREATE PROCEDURE GetDoctors AS select Name from HospitalStaff where Position = ‘Doctor’ CREATE PROCEDURE InsertStaff ( @Name varchar(50), @Position varchar(50) ) AS insert into HospitalStaff (Name, Position) values (@Name, @Position) LINQ và SQL – Truy vấn dữ liệu với DataContext Tạo function trong SQL CREATE FUNCTION Doctors() RETURNS TABLE AS RETURN select * from hospitalstaff where Position = ‘Doctor’ CREATE FUNCTION Doctors(@pos varchar(10)) RETURNS TABLE AS RETURN select * from hospitalstaff where Position = @pos LINQ và SQL – Truy vấn dữ liệu với DataContext Gọi StoreProcedure, Function: để dùng StoreProcedure, Function ta phải drag and drop các procedure này vào DataContext • Gọi Function: • Gọi StoreProcedure LINQ và ADO.NET ENTITIES ADO.NET: • Công nghệ dùng để kết nối tới các CSDL (nhiều loại DL khác nhau) • Thêm, cập nhật, xóa, truy vấn dữ liệu • Hỗ trợ cả 2 mô hình connected và disconnected LINQ và ADO.NET ENTITIES Kiến trúc ADO.NET LINQ và ADO.NET ENTITIES ADO.NET Data Providers: Thư viện cung cấp các phương tiện để kết nối, truy xuất đến các nguồn dữ liệu khác nhau LINQ và ADO.NET ENTITIES Các thành phần chính của ADO.NET: Objects Công dụng Connection Thiết lập kết nối tới CSDL Command Thực hiện các câu lệnh SQL DataReader Nhận kết quả trả về khi thực hiện command có chứa câu lệnh Select. Cho phép duyệt qua các mẫu tin nhanh(duyệt một chiều, không cho phép cập nhật dữ liệu) DataSet Chứa một hoặc nhiều DataTable. Dữ liệu của DataSet chứa trong bộ nhớ(hổ trợ mô hình disconnected). Có thể cập nhật dữ liệu trong DataSet DataAdapter Cập nhật dữ liệu từ các DataTable xuống CSDL LINQ và ADO.NET ENTITIES ADO.NET Entity Framework:Cung cấp một phương thức mới để sử dụng ADO.NET LINQ và ADO.NET ENTITIES Entity Data Model: • Conceptual model định nghĩa:  Các entity dùng trong ứng dụng  Quan hệ giữa các entity • Storage model định nghĩa • Cấu trúc của các đối tượng trong Database LINQ và ADO.NET ENTITIES Entity Framework: • Chuyển câu lệnh LINQ thành câu lệnh truy vấn tương ứng theo ngôn ngữ của Database • Chuyển các đối tượng trả về của câu truy vấn thành các entity tương ứng LINQ và ADO.NET ENTITIES Với ADO.NET Entity Framework: • Người lập trình hoàn toàn có thể xây dựng chương trình theo mô hình hướng đối tượng mà không lệ thuộc vào các table có trong database • Mỗi Entity trong mô hình có thể đại diện:một table, một phần table, nhiều table • Mỗi Entity có một hoặc nhiều thuộc tính LINQ và ADO.NET ENTITIES Sử dụng Entity Data Model Wizard (xem hướng dẫn trong file “Use the Entity Data Model Wizard” hoặc trang 577 Murach_ADO_NET_3_5_LINQ) • Sau khi tạo xong file EDMX (ví dụ hospital.edmx) VS2008 tạo lớp HospitalEntities. Ta dùng đối tượng của lớp này để truy xuất dữ liệu thông qua các entity LINQ và ADO.NET ENTITIES • Lấy dữ liệu: LINQ và ADO.NET ENTITIES • Lấy dữ liệu: LINQ và ADO.NET ENTITIES • Lấy dữ liệu: LINQ và ADO.NET ENTITIES • Thêm dữ liệu: LINQ và ADO.NET ENTITIES • Cập nhật dữ liệu: LINQ và ADO.NET ENTITIES • Xóadữ liệu: View more...

Comments

Report "5_Truy xuat du lieu voi LINQ"

Please fill this form, we will try to respond as soon as possible.

Your name Email Reason -Select Reason- Pornographic Defamatory Illegal/Unlawful Spam Other Terms Of Service Violation File a copyright complaint Description Close Submit Share & Embed "5_Truy xuat du lieu voi LINQ"

Please copy and paste this embed script to where you want to embed

Embed Script Size (px) 750x600 750x500 600x500 600x400 URL Close Copyright © 2017 DOCUMEN Inc.

Từ khóa » Cú Pháp Truy Vấn Dữ Liệu Với Linq To Sql