Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010

60 744 0
Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP.HCM  ĐỒ ÁN : Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010. GVHD : Ths. Tôn Long Phước Lớp : ĐHTH6ALT Sinh Viên : Trần Minh Thảo (10344871) Võ Thị Kim Xuyến (10327901) Tp HCM, 11/2011 Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 2 MỤC LỤC 1. Giới thiệu về LINQ 3 1.1. Tại sao LINQ ra đời ? 4 1.2. LINQ là gì? 4 1.3. Các thành phần của LINQ 4 1.3.1. LINQ to Objects 5 1.3.2. LINQ to XML 5 1.3.3. LINQ to SQL 5 2. LINQ TO OBJECT 13 2.1. Giới thiệu 13 2.2. Truy vấn với một mảng 13 2.3. Bộ lọc dữ liệu 14 2.4. Phép chiếu 16 2.5. Phương thức Extension 19 3. LINQ to XML 21 3.1. Giới thiệu về LINQ to XML 21 3.2. Mô hình LINQ to XML 21 3.3. Xây dựng một cây XML 22 3.3.1. Tạo một phần tử XML 22 3.3.2. Tạo một thuộc tính cho phần tử XML: 23 3.3.3. Tạo ghi chú trong cây XML: 24 3.3.4. Xây dựng một cây XML. 25 3.4. XML namespace 26 3.4.1. Giới thiệu namespace 26 3.4.2. Tạo một namespace trong cây XML 27 3.4.3. Điều khiển tiền tố namespace trong cây XML 27 3.4.4. Viết truy vấn LINQ trong namespace 28 3.5. Những thao tác truy vấn cơ bản trên cây XML 29 3.5.1. Tìm một phần tử trong cây XML 29 3.5.2. Lọc phần tử trong cây XML 30 3.5.3. Sắp xếp các phần tử trong cây XML 31 Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 3 3.5.4. Kết hai cây XML 32 3.5.5. Nhóm các phần tử trong một cây XML 36 3.6. Những thao tác biến đổi trên cây XML 38 3.6.1. Thêm phần tử, thuộc tính và nút vào một cây XML 38 3.6.2. Thay đổi phần tử, thuộc tính và nút của một cây XML 39 3.6.3. Xóa phần tử, thuộc tính và nút từ một cây XML 42 4. LINQ to SQL 45 4.1. Giới thiệu 45 4.2. Mô hình hóa CSDL dùng LINQ to SQL: 46 4.3. Tìm hiểu lớp DataContext 48 4.4. Các ví dụ LINQ to SQL 49 4.4.1. Lấy các Product từ CSDL 49 4.4.2. Cập nhật một sản phẩm trong CSDL 49 4.4.3. Chèn thêm một phân loại mới và hai sản phẩm vào CSDL 49 4.4.4. Xóa các sản phẩm 50 4.4.5. Gọi một thủ tục 51 4.4.6. Lấy các sản phẩm và phân trang 51 4.5. Dùng các Stored Procedure 52 5. ƯU VÀ NHƯỢC ĐIỂM CỦA LINQ 54 Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 4 1. Giới thiệu về LINQ 1.1. Tại sao LINQ ra đời ? Đã lâu lắm rồi, ngành công nghiệp phần mềm mới chứng kiến một cuộc đổi thay mang tính bước ngoặc về mặt ngôn ngữ, đó chính là LINQ, được gọi là "Back to the future", mang hơi hướng của một ngôn ngữ lập trình KHÔNG hướng đối tượng. Thật ra, bản chất của nó chính là thống nhất sự khác biệt giữa hai mô hình : Đối tượng và Dữ liệu. Một cách nôm na, giờ đây, chúng ta chỉ cần biết một ngôn ngữ mà thôi, không phải biết thêm SQL, XPath Nó cố gắng tiếp cận Data, nó đồng thời tự nâng cao năng lực của chính nó, đưa ra khả năng lập trình mới trong .NET kiểu truy vấn :Sql DB, Objects và Xml… 1.2. LINQ là gì? LINQ là viết tắt của từ Language – Integrated Query tạm dịch là ngôn ngữ tích hợp truy vấn. Theo định nghĩa trên thư viên MSDN của Microsoft, LINQ là một tập hợp các phần mở rộng của .Net Frame Work. LINQ bao gồm ngôn ngữ tích hợp truy vấn, thiếp lập và chuyển đổi hoạt động. LINQ là một tập hợp các thành phần mở rộng cho phép viết các câu truy vấn dữ liệu ngay trong một ngôn ngữ lập trình, như C# hoặc VB.NET. Sự tích hợp của LINQ nhằm loại bỏ rào cản giữa các ngôn ngữ lập trình và các cơ sở dữ liệu. Các thành phần của LINQ 1.3. Các thành phần của LINQ Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 5 1.3.1. LINQ to Objects LINQ to Objects là tên được gán cho các API về IEnumrable<T> dùng cho các thao tác truy vấn dữ liệu chuẩn (Standard Query Operations). Cho phép bạn thực thi các truy vấn trên các mảng, các collection trong bộ nhớ. Các thao tác truy vấn dữ liệu chuẩn này là các phương thức static của lớp static System.Linq.Enumrable. Bạn sử dụng các phương thức này để tạo ra các truy vấn LINQ to Object. 1.3.2. LINQ to XML LINQ to XML là tên được gán cho API chuyên dụng làm việc với XML. Microsoft không chỉ thêm các thư viện XML cần thiết để làm việc với LINQ, họ còn nhắm đến các nhược điểm của XML DOM chuẩn. Bằng cách đó chúng ta có thể thao tác với XML dễ dàng hơn rất nhiều so với trước đây. Chúng ta sẽ không còn phải tạo ra cả một XmlDocument chỉ để làm việc với một mẫu nhỏ XML. Để sử dụng LINQ to XML chúng ta phải tham chiếu đến System.Xml.Linq. 1.3.3. LINQ to SQL Là tên gọi được đặt cho API IQueryable<T>, cho phép LINQ làm việc với cơ sở dữ liệu Microsoft SQL Server. Để sử dụng bạn phải tham chiếu đến System.Data.Linq. Dùng câu truy vấn LINQ để truy vấn những nguồn dữ liệu khác nhau đến tầng ADO.NET. Những nguồn dữ liệu này bao gồm .Net entities, SQL database và dataset. 1.4. Cú pháp truy vấn và Cú pháp phương thức 1.4.1. Cú pháp truy vấn (Query Syntax) Cú pháp truy vấn được viết giống như các truy vấn T-SQL. Select/SelectMany, Where, Sum/Min/Max/Average/Aggregate, Join/GroupJoin, Take/TakeWhile, Skip/SkipWhile, OfType, concat, Orderby/ThenBy, Reverse, GroupBy, Distinct, Union/Intersect/Except, EqualAll, First/FirstOrDefault/Last/LastOrDefault, Single, ElementAt, Any/All/Contains, Count. Ngữ pháp của query expression Một query expression phải tuân thủ chặt chẽ những luật sau đây: Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 6 1. Một query expression phải bắt đầu với từ khóa from. 2. Phần còn lại của query expression có thể không hoặc chứa thêm nhiều mệnh đề from, let hoặc where. Mệnh đề from là một mệnh đề chỉ định ra các biến liệt kê dựa trên một chuỗi hay nhiều chuỗi được join lại với nhau. Mệnh đề let khai báo một biến và gán giá trị cho biến đó. Mệnh đề where lọc các thành phần từ chuỗi hoặc từ nhiều chuỗi join lại với nhau để ra chuỗi xuất. 3. Phần còn lại của query expression có thể được theo sau bởi mệnh đề orderby. Mệnh đề này chứa một hoặc nhiều filed với tùy chọn điều khiển sắp xếp. Chỉ dẫn có thể là một trong hai ascending hoặc descending. 4. Phần còn lại của query expression phải theo sau bởi mệnh đề select hoặc group. 5. Phần còn lại của query expression có thể được theo sau bởi những mệnh đề tùy chọn tiếp theo (optional continuation clause). Một mệnh đề optional continuation có thể là một trong hai, hoặc mệnh đề into, hoặc không hay nhiều mệnh đề join, hoặc sự lặp lại của các mệnh đề trong luật số 2. Mệnh đề into đưa kết quả truy vấn vào một chuỗi xuất ảo, mà nó hoạt động nhưng một mệnh đề from cho một query expression theo sau được bắt đầu bởi các mệnh đề ở luật số 2. Bạn có thể sử dụng hệ thống văn phạm dưới đây được cung cấp bởi MSDN query-expression: from-clause query-body from-clause: from typeopt identifier in expression join-clausesopt join-clauses: join-clause join-clauses join-clause join-clause: join typeopt identifier in expression on expression equals Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 7 expression join typeopt identifier in expression on expression equals expression into identifier query-body: from-let-where-clausesopt orderby-clauseopt select-or-group-clause query-continuationopt from-let-where-clauses: from-let-where-clause from-let-where-clauses from-let-where-clause from-let-where-clause: from-clause let-clause where-clause let-clause: let identifier = expression where-clause: where boolean-expression orderby-clause: orderby orderings orderings: ordering orderings , ordering ordering: expression ordering-directionopt ordering-direction: ascending descending Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 8 select-or-group-clause: select-clause group-clause select-clause: select expression group-clause: group expression by expression query-continuation: into identifier join-clausesopt query-body 1.4.2. Cú pháp phương thức (Method Syntax) : Các truy vấn được viết như các phương thức bình thường, chúng còn được gọi với một cái tên khác là các toán tử truy vấn chuẩn 1.4.2.1. Biểu thức LAMBDA Trong C# 3.5, Microsoft thêm vào các biểu thức lambda (lambda expression). Lambda expression được sử dụng trong ngôn ngữ máy tính từ thời ngôn ngữ LISP. Những biểu thức này giúp chúng ta tốc kí cú pháp khi chỉ ra một thuật toán. Biểu thức lambda được định dạng bao gồm một dãy các tham số được đặt bên trong dấu ngoặc đơn (các tham số này cách nhau bởi dấu phẩy, nếu chỉ có một tham số thì không cần dấu ngoặc đơn), theo sau tham số là toán tử lambda, theo sau nữa là biểu thức hoặc khối lệnh. Trong C# 3.5, toán tử lambda kí hiệu là =>. Một biểu thức lambda thường giống như sau: (parameter 1, parameter 2,…, parameter N) => expression Hoặc: (parameter 1, parameter 2,…, parameter N) => { Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 9 Statement 1; Statement 2; … Statement N; return(variable); } Sau đây là một ví dụ về biểu thức lambda: x => y Biểu thức này có nghĩa là chúng ta đưa vào tham số là x và lấy ra kết quả là giá trị y. Điều quan trọng chúng ta cần biết, đây chính là một delegate. Delegate này chỉ rõ kiểu của biến x được đưa vào và kiểu biến y được trả về. Một ví dụ cho một biểu thức lambda phức tạp hơn như sau: (x, y) => { if (x > y) return (x); else return (y); } Điều quan trọng là bạn phải nhớ rõ các kiểu tham số nhập vào và kiểu giá trị trả về mà delegate đã định nghĩa. Vì vậy chúng ta phải chắc chắn biểu thức lambda phải phù hợp với định nghĩa delegate. Ví dụ 1-1: Đây là một ví dụ lọc các giá trị lẻ trong một mảng số nguyên có sử dụng biểu thức lambda class Common { public delegate bool IntFilter(int i); Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 10 public static int[] FilterArrayOfInts(int[] ints, IntFilter filter) { ArrayList aList = new ArrayList(); foreach(int i in ints) if(filter(i)) { aList.Add(i); } return ((int[])aList.ToArray(typeof(int))); } } class Program { static void Main(string[] args) { int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int[] oddNums = Common.FilterArrayOfInts(nums, x =>(x & 1) == 1); foreach(int i in oddNums) { Console.WriteLine(i); } } } [...]... numsQuery) Console.Write("{0},",x); 11 Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 Console.WriteLine(); foreach (var x in numsMethod) Console.Write("{0},",x ); Console.WriteLine(); Console.WriteLine(numsCount); } 12 Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 2 LINQ TO OBJECT 2.1 Giới thiệu LINQ to Objects” ở đây có nghĩa là nói đến cách sử dụng LINQ đối với các đối tượng Collection... public string Name { get; set; } } 20 Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 3 LINQ to XML 3.1 Giới thiệu về LINQ to XML LINQ to XML cung cấp giao diện lập trình XML mà đòn bẩy là NET LINQ Framework LINQ to XML sử dụng ngôn ngữ mới nhất của NET Framework và được so sánh và thiết kế lại với giao diện lập trình XML Document Object Model (DOM) LINQ to XML cũng giống như Document Object... thể của các loại đối tượng trong tập hợp 13 Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 Một ví dụ đơn giản về cách sử dụng LINQ đối với một kiểu mảng thông thường int[] numbers = { 1, 2, 5, 2, 8, 5, 9, 4, 0, 5, 6 }; var evens = from n in numbers where n % 2 == 0 select n; foreach (int n in evens) { Console.WriteLine("{0}",n); } Trong ví dụ, có một mảng số, công việc là cần lọc ra những... books = XElement.Parse( @" Pro LINQ: Language Integrated Query in C# 2010 Joe Rattz Pro NET 4.0 Parallel Programming in C# Adam Freeman Pro VB 2010 and the NET 4.0 Platform 25 Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 Andrew Troelsen ");... vấn cơ bản trên cây XML 3.5.1 Tìm một phần tử trong cây XML Xét ví dụ sau tìm phần tử Address có thuộc tính Type có giá trị là "Billing" C# XElement root = XElement.Load("PurchaseOrder.xml"); IEnumerable address = from el in root.Elements("Address") where (string)el.Attribute("Type") == "Billing" select el; 29 Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 foreach (XElement el in... content c3 content 3.4.4 Viết truy vấn LINQ trong namespace Ví dụ: C# XNamespace aw = "http://www.adventure-works.com"; XElement root = XElement.Parse( @" 1 2 28 Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 3 4 5... Jaime Yorres 4 1998-02-12T00:00:00 35 Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 3.5.5 Nhóm các phần tử trong một cây XML Ví dụ nhóm dữ liệu theo loại, sau đó tạo ra một tập tin XML mới, trong đó phân cấp XML theo nhóm C# XElement doc = XElement.Load("Data.xml"); var newData = new XElement("Root", from... rất nhiều lớp XElement, bởi vì chúng ta đã thảo luận từ trước, LINQ to XML là element-centric, ngược lại W3C DOM là document-centric 3.3 Xây dựng một cây XML 3.3.1 Tạo một phần tử XML Cấu trúc XElement(XName , object ) XElement(XName) XName: tên phần tử Object: nội dụng của phần tử 22 Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 Ví dụ sau tạo phần tử có nội dung “Adventure Works”... trúc XAttribute(XName, object) XName: thuộc tính object: giá trị của thuộc tính 23 Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 C# XElement phone = new XElement("Phone", new XAttribute("Type", "Home"), "555-555-5555"); Console.WriteLine(phone); Xml 555-555-5555 3.3.3 Tạo ghi chú trong cây XML: Tạo một phần tử gồm một chú thích như một nút con Tên XComment(String)... formattedEmployees = Select(Where(employees, emp => emp.ID % 2 == 0), (emp) => new FormatEmployees { ID = emp.ID, Name = emp.lastName + " " + emp.firstName }); 18 Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 2.5 Phương thức Extension Được định nghĩa trong một lớp tĩnh public static class MyExtensionMethods { public static IEnumerable Where(this IEnumerable source, Func filter) { . Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 2 MỤC LỤC 1. Giới thiệu về LINQ 3 1.1. Tại sao LINQ ra đời ? 4 1.2. LINQ là gì? 4 1.3. Các thành phần của LINQ 4 1.3.1. LINQ. ƯU VÀ NHƯỢC ĐIỂM CỦA LINQ 54 Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 4 1. Giới thiệu về LINQ 1.1. Tại sao LINQ ra đời ? Đã lâu lắm rồi, ngành công nghiệp phần mềm. 3.5.1. Tìm một phần tử trong cây XML 29 3.5.2. Lọc phần tử trong cây XML 30 3.5.3. Sắp xếp các phần tử trong cây XML 31 Tìm hiểu công nghệ lập trình LINQ trong Visual Studio 2010 3 3.5.4.

Ngày đăng: 09/07/2015, 13:51

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan