1. Trang chủ
  2. » Công Nghệ Thông Tin

Tuan10 c net linq

20 1 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 1,21 MB

Nội dung

11/7/2018 Lập trình Ứng dụng quản lý C#.NET LINQ Nội dung  Các tính NET 3.0+  Extension Method  Query Expression  Khái niệm LINQ  LINQ Query 11/7/2018 Nội dung  Các tính NET 3.0+  Extension Method  Query Expression  Khái niệm LINQ  LINQ Query Các tính NET 3.0+  Kiểu liệu không tường minh 11/7/2018 Các tính NET 3.0+ (tt)  Phép khởi tạo tập hợp List list = new List(); list.Add(1); list.Add(2); list.Add(3); List list = new List() {1, 2, 3}; Các tính NET 3.0+ (tt)  Automatic Properties string _data; public string Data { get { return _data; } set { _data = value; } } public string Data { get; set; } 11/7/2018 Các tính NET 3.0+ (tt)  Object Initializers class MyClass { public string Prop1 { get; set; } public string Prop2 { get; set; } } MyClass c = new MyClass(); c.Prop1 = “Value1”; c.Prop2 = “Value2”; MyClass c = new MyClass { Prop1 = “Value1”, Prop2 = “Value2” }; Các tính NET 3.0+ (tt)  Anonymous Type var dude = new { Name = “Bob”, Age = 25 }; internal class AnonymousGeneratedTypeName { public string Name { get; set; } public int Age { get; set; } } AnonymousGeneratedTypeName dude = new AnonymousGeneratedTypeName {Name = “Bob”, Age = 25}; 11/7/2018 Các tính NET 3.0+ (tt)  Mở rộng phương thức cho lớp đối tượng  Lambda Expression  Expression Trees  Query Expression  LINQ Nội dung  Các tính NET 3.0+  Extension Method  Query Expression  Khái niệm LINQ  LINQ Query 11/7/2018 Extension Methods  Có từ C# 3.5  Cho phép tạo thêm phương thức cho class mà khơng cần tạo class kế thừa Nói cách khác thực thi hàm thể phương thức lớp đối tượng khác  Được dùng nhu cầu cần thêm số hành xử đối tượng mà thay đổi kiểu đối tượng  Có thể gọi phương thức từ đối tượng null class Cách tạo Extension Method  Phương thức để tạo Extension Method phải thỏa điều kiện:  Là phương thức static static class không kế thừa, khơng generic  Phải có tham số đầu vào  Tham số phải có từ khóa this theo trước  Tham số khơng kèm theo từ khóa out, ref ,… khơng kiểu pointer  Ví dụ: public static class MyExtensionMethod { //extension method cho class object public static bool isNull(this object obj) { return obj == null; } } 11/7/2018 Ví dụ tình sử dụng  Có class SinhVien public class SinhVien { public string HoTen{get;set;} public int NamSinh{get;set;} }  Hàm sử dụng class SinhVien public class SVUlti { public static SinhVien SVLonTuoiHon(SinhVien sv1, SinhVien sv2) { return (sv1.NamSinh > sv2.NamSinh) ? sv2 : sv1; } }  Bây sử dụng hàm có mà cần thêm phương thức lấy họ Sinh viên?  Tạo Extension method cho class SinhVien đáp ứng yêu cầu public static class MyExtensionMethod { //extension method cho class SinhVien public static string LayHoSV(this SinhVien sv) { int idx = sv.HoTen.IndexOf(' '); if (idx == -1) idx = sv.HoTen.Length; return sv.HoTen.Substring(0, idx); } }  Khi sử dụng sau var sv1 = new SinhVien { HoTen = "Nguyen Van A", NamSinh = 1992 }; var sv2 = new SinhVien { HoTen = "Tran Thi B", NamSinh = 1993 }; var hoSV = SVUlti.SVLonTuoiHon(sv1, sv2).LayHoSV(); 11/7/2018 Tạo extension method khác public static List LayDSHoSV(this List ds) { var l = new List(); foreach (SinhVien sv in ds) { l.Add(sv.LayHoSV()); } return l; } public static List LayDSSVLonTheoNam(this List ds, int nam) { var l = new List(); foreach (SinhVien sv in ds) { if (sv.NamSinh < nam) { l.Add(sv); } } return l; } Mức độ ưu tiên Extension Method  Extension method có độ ưu tiên thấp Instance method Điều có nghĩa có xuất Instance method ln gọi thay Extension method  Ví dụ class SinhVien có phương thức LayHoSV class (instance method) ln sử dụng public class SinhVien { public string HoTen{get;set;} public int NamSinh{get;set;} public string LayHoSV() { return "Ho"; } } 11/7/2018 Extension methods NET 3.5  Được sử dụng chủ yếu cho LINQ  Chứa đựng chủ yếu class là: Enumerable Queryable  Hầu hết phương thức từ Enumerable xử lý IEnumerable phương thức từ Queryable xử lý IQueryable  Không phải tất phương thức Enumerable Queryable Extension method Ví dụ  Phương thức Range Enumerable tạo mảng số int theo dạng IEnumerable Đây phương thức tĩnh class //tạo mảng {0, 1, 2, 3, , 9} IEnumerable lstInt = Enumerable.Range(0, 10); //sử dụng phương thức mở rộng lstInt = lstInt.Reverse();  Phương thức Reverse extension method class IEnumerable cài đặt Enumerable Do viết liền sau: IEnumerable lstInt = Enumerable.Range(0, 10) Reverse(); 11/7/2018 Phương thức mở rộng Where  Là extension method cho class IEnumerable cài đặt Enumerable  Cung cấp khả lọc (filter) liệu theo điều kiện mong muốn (Predicate)  Xem cách sử dụng: //lấy số lẻ mảng đảo mảng var lstInt = Enumerable.Range(0, 10) Where(x => x % != 0) Reverse();  Cài đặt thực tế extension method Where public static IEnumerable Where(this IEnumerable source, Func predicate) { if (source == null || predicate == null) { throw new ArgumentNullException(); } return WhereImpl(source, predicate); } private static IEnumerable WhereImpl(IEnumerable source, Func predicate) { foreach (T item in source) { if (predicate(item)) { yield return item; } } } 10 11/7/2018 Phương thức mở rộng Select  Là phương thức thông dụng dùng lấy liệu IEnumerable cung cấp extension Enumerable  Nó xử lý IEnumerable đưa liệu vào IEnumerable cách dùng delegate Func  Ví dụ: //lấy đối tượng từ số lẻ mảng đảo mảng var lstInt = Enumerable.Range(0, 10) Where(x => x % != 0) Reverse() Select(x => new { Original = x, Sqrt = Math.Sqrt(x) }); Phương thức mở rộng OrderBy  Cung cấp khả xếp liệu theo tiêu chí lựa chọn  Bao gồm phương thức: OrderBy, OrderByDescending, ThenBy, ThenByDescending  Ví dụ //lấy đối tượng từ mảng số xếp var dsSN = Enumerable.Range(-5, 11) Select(x => new { Org = x, Sqr = x * x }) OrderBy(x => x.Sqr) ThenByDescending(x => x.Org); 11 11/7/2018 Nội dung  Các tính NET 3.0+  Extension Method  Query Expression  Khái niệm LINQ  LINQ Query Query Expression  Ra đời với C# 3.5 nhằm cung cấp cú pháp (syntax) ngơn ngữ tích hợp (language-integrated) cho lệnh truy vấn tương tự ngôn ngữ truy vấn quan hệ phân cấp SQL, XQuery  Query expression bắt đầu với mệnh đề from kết thúc mệnh đề select group Nói cách khác ln bắt đầu với nguồn liệu kết thúc liệu lựa chọn  Ví dụ var lst = Enumerable.Range(0, 11); var resultQ = from i in lst where i % == select i; 12 11/7/2018 Compiler translations  Là sở tảng Query expression  Mục tiêu thông dịch cú pháp Query expression sang C# code bình thường  Ví dụ câu lệnh query expression ví dụ trước thơng dịch dạng var lst = Enumerable.Range(0, 11); var resultQ = lst.Where(i => i % == 0) Select(i => i);  Xét cụ thể ví dụ sau:  Có class Test với phương thức Select public class Test { public Test Select(Func selector) { MyExtensionMethod.sb.AppendLine("Select called "); return new Test(); } }  Xây dựng extension method public static class MyExtensionMethod { public static StringBuilder sb = new StringBuilder(); //extension method cho class Test public static Test Where(this Test test, Func predicate) { sb.AppendLine("Where called "); return test; } } 13 11/7/2018  Sử dụng query expression MyExtensionMethod.sb.Clear(); var temp = new Test(); var rs = from test in temp where test.ToString() == "" select "test";  Bản chất sau thơng dịch rs = temp.Where(x => x.ToString() == "") Select(x => "test");  Kết sb là: “Where called… Select called…” đối tượng rs Test Query Operators  Bản chất extension method Category Restriction Projection Partitioning Join Concatenation Ordering Grouping Set Where Select, SelectMany Take, Skip, TakeWhile, SkipWhile Join, GroupJoin Concat OrderBy / ThenBy, Reverse GroupBy Distinct, Union, Intersect, Except Conversion ToSequence, ToArray, ToList, ToDictionary, ToLookup, OfType, Cast Equality EqualAll First, FirstOrDefault, Last, LastOrDefault, Single, SingleOrDefault, ElementAt, ElementAtOrDefault, DefaultIfEmpty Range, Repeat, Empty Any, All, Contains Count, LongCount, Sum, Min, Max, Average, Aggregate Element Generation Quantifiers Aggregate Operator 14 11/7/2018 Nội dung  Các tính NET 3.0+  Extension Method  Query Expression  Khái niệm LINQ  LINQ Query Khái niệm LINQ  LINQ đọc LINK, LIN-QUEUE  LINQ: Language Integrated Query  Ra đời từ phiên Net 3.5 gắn liền với Extension Method chức lập trình mới, LINQ trở thành “cầu nối để xóa khoảng cách hai giới: object data”  LINQ cho phép developer thực truy vấn nhiều dạng liệu NET  NET Objects (List, Queue, Array, …)  Database (DLINQ)  XML (XLINQ)  Parallel LINQ (PLINQ) 15 11/7/2018 Phân loại LINQ  LINQ chia thành ba loại dựa vào đối tượng sử dụng  LINQ to Objects  LINQ to XML  LINQ-enabled ADO.NET (LINQ to SQL, LINQ to DataSet LINQ to Entities)  Có thể bổ sung provider để mở rộng nguồn liệu mà LINQ truy vấn Kiến trúc LINQ  Kiến trúc 16 11/7/2018 Syntax  LINQ syntax  Query syntax var q1 = from i in arrI where i % == select i;  Method syntax hay Lambda syntax var q2 = arrI.Where(i => i % == 0) Select(i => i); Cơ sở LINQ  Nền tảng LINQ dựa vào yếu tố quan trọng sau  Implicitly typed local variables (cho phép khai báo biến với kiểu liệu không tường minh)  Object/collection initialization syntax (cú pháp khởi tạo đối tượng, danh sách)  Lambda Expressions  Extension methods  Anonymous types 17 11/7/2018 Expression Tree  Vai trị Expression Tree LINQ Nội dung  Các tính NET 3.0+  Extension Method  Query Expression  Khái niệm LINQ  LINQ Query 18 11/7/2018 LINQ Query  Một truy vấn biểu thức để lấy liệu từ nguồn liệu  Truy vấn thường thể ngôn ngữ truy vấn đó: SQL – sở liệu quan hệ, Xquery – XML,…  LINQ đơn giản hóa việc cách cung cấp mơ hình phù hợp để làm việc với liệu nguồn liệu khác Các bước  Thực truy vấn LINQ gồm bước  Tạo nguồn liệu  Tạo truy vấn  Thực truy vấn 19 11/7/2018 LINQPad  Là chương trình hỗ trợ thực thi LINQ query với hầu hết nguồn liệu  Cho phép sử dụng theo syntax (Query Lambda) Bài tập làm với LINQPad  Cho mảng: { 5, 4, 1, 3, 9, 8, 6, 7, 2, } Tạo mảng cho phần tử lớn đơn vị với mảng cho vị trí tương ứng  Cho mảng: { 5, 4, 1, 3, 9, 8, 6, 7, 2, } Hãy cho biết có số lẻ mảng  Cho mảng số { 5, 4, 1, 3, 9, 8, 6, 7, 2, } Hãy xuất mảng số dạng chuỗi (5 “five”, “six”,…)  Cho mảng: { "aPPLE", "BlUeBeRrY", "cHeRry" } Hãy liệt kê mảng với kiểu viết HOA thường  Cho mảng: { 5, 4, 1, 3, 9, 8, 6, 7, 2, } Hãy xuất mảng dạng chuỗi đồng thời cho biết giá trị chẵn hay lẻ 20

Ngày đăng: 09/04/2023, 06:29

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN