Những hiểu biết được tổng hợp từ :
http://namdh.wordpress.com
http://weblogs.asp.net/scottgu/
Google + ebooks
I Căn bản - LINQ
1- Khái niệm
- Chúng ta có thể viết ngay các câu lệnh truy vấn database giống như là sql trên code
- LINQ-Object, LINQ-SQL, LINQ-XML
2- Nền tảng của LINQ
A - Query Operator và Query Expression
Query Operator
+ Khái niệm
Là 1 tập hợp những extension method mà ở đây nó thực hiện việc truy vấn dữ liệu như là Where, Select
+ Thuận Lợi
Có đầy đủ các chức năng cần thiết để truy vấn, được microsoft hỗ trợ đầy đủ
+ Khó khăn
Khó sử dụng vì phải hiểu cơ chế làm việc, sử dụng lambda để giải quyết ( sử dụng toán tử => hơi giống C++), muốn hiểu rõ hơn và sử dụng thì phải hiểu về delegate, extension method vv. Nói chung là rất nhiều
Query Expression
+ Khái niệm
Tương tự như là cú pháp của sqlserver, khi complier nó sẽ truyền tải và gọi những query operator tương ứng
+ Thuận lợi
Dễ sử dụng khi mới học LINQ cú pháp khá giống với SQL server, dễ hiểu
+ Khó khăn
Không đầy đủ các chức năng, thiếu nhiều toán tử hỗ trợ ví dụ như count. Lúc đó bạn phải dùng và kết hợp operator
Ví dụ se cho bạn thấy việc sử dụng query và expression
LINQ - Object thì sẽ thực thi INumerable. Đơn giản nó là 1 interface được sử dụng để gọi những sequence (expression and operator) trong thư viện của LINQ.
Toàn bộ dữ liệu được đặt trong memory
Thuận lợi
Dynamic query - Có thể kết hợp nhiều câu query lại với nhau
Ví dụ: var _vQuery = from book in books select book; <-- luc nay câu query chưa được thực thi chúng ta có thể nối thêm query vào câu query này, đây là cơ chế deferred sẽ được giới thiệu trong phần dưới
Khó khăn
LINQ-Object được sử dụng để truy lục generic collection mà ở đây thực thi System.Collec-
tions.Generic.IEnumerable<T> interface (Ví dụ như các kiểu List<T> vvv). Nhưng các kiểu không phải là generic thì chúng ta cần phải cast chẳng hạn như ArrayList, chúng ta có thể sử dụng ArrayList.Cast, hoặc query expression
Book: chính là object Book trong dataContext
Ở đây chúng ta sẽ thấy cú pháp select new {} - kiểu Anonymous có thể sử dụng trong việc join
D-IQueryable
Thuận lợi
- Giảm network, giảm sử lý ở client, tận dụng index từ database
Khó khăn
Cả IEnumerable và IQueryable đều được áp dụng cơ chế xử lý deferred query execution (Trì hoãn thực thi truy vấn)
Đây là 1 khái niệm rất quan trọng trong LINQ, nếu không có nó sự thực thi của LINQ sẽ rất tệ
Nó cho phép định nghĩa câu truy vấn tại 1 thời điểm và có thể sử dụng nó cho sau này
Khi bạn sử dụng với database theo tôi nên sử dụng LINQ-SQL, tại sao Microsoft lại đưa ra LINQ-Object, LINQ-SQL, LINQ-XML ... Tại sao lại không sử dụng LINQ-Object cho tất cả trường hợp?
Giả sử khi tôi truy lục
var subjects = dataContext.GetTable<Subject>().ToList<Subject>();
Nó sẽ được xử lý bởi LINQ-Object chứ không phải là LINQ - SQL
Bằng việc chuyển đổi sang List hoặc Array (trả về kiểu IEnumerable) chúng ta sẽ mất đi lợi ích của LINQ-SQL như là tối ưu dữ liệu truy lục, giới hạn dữ liệu đặt trong memory
http://namdh.wordpress.com
http://weblogs.asp.net/scottgu/
Google + ebooks
I Căn bản - LINQ
1- Khái niệm
- Chúng ta có thể viết ngay các câu lệnh truy vấn database giống như là sql trên code
- LINQ-Object, LINQ-SQL, LINQ-XML
2- Nền tảng của LINQ
A - Query Operator và Query Expression
Query Operator
+ Khái niệm
Là 1 tập hợp những extension method mà ở đây nó thực hiện việc truy vấn dữ liệu như là Where, Select
+ Thuận Lợi
Có đầy đủ các chức năng cần thiết để truy vấn, được microsoft hỗ trợ đầy đủ
+ Khó khăn
Khó sử dụng vì phải hiểu cơ chế làm việc, sử dụng lambda để giải quyết ( sử dụng toán tử => hơi giống C++), muốn hiểu rõ hơn và sử dụng thì phải hiểu về delegate, extension method vv. Nói chung là rất nhiều
Query Expression
+ Khái niệm
Tương tự như là cú pháp của sqlserver, khi complier nó sẽ truyền tải và gọi những query operator tương ứng
+ Thuận lợi
Dễ sử dụng khi mới học LINQ cú pháp khá giống với SQL server, dễ hiểu
+ Khó khăn
Không đầy đủ các chức năng, thiếu nhiều toán tử hỗ trợ ví dụ như count. Lúc đó bạn phải dùng và kết hợp operator
Ví dụ se cho bạn thấy việc sử dụng query và expression
using System; using System.Diagnostics; using System.Linq; namespace QueryExpression { class Program { static void Main(string[] args) { // Method syntax (dot-notation) var processes1 = Process.GetProcesses() .Where(process => process.WorkingSet64 > 20*1024*1024) .OrderByDescending(process => process.WorkingSet64) .Select(process => new { process.Id, Name=process.ProcessName }); Console.WriteLine("With method syntax:"); foreach (var process in processes1) Console.WriteLine(process); Console.WriteLine(); // Query expression var processes2 = from process in Process.GetProcesses() where process.WorkingSet64 > 20*1024*1024 orderby process.WorkingSet64 descending select new { process.Id, Name=process.ProcessName }; Console.WriteLine("With query expression:"); foreach (var process in processes2) Console.WriteLine(process); } } }C-INumerable
LINQ - Object thì sẽ thực thi INumerable. Đơn giản nó là 1 interface được sử dụng để gọi những sequence (expression and operator) trong thư viện của LINQ.
Toàn bộ dữ liệu được đặt trong memory
Thuận lợi
Dynamic query - Có thể kết hợp nhiều câu query lại với nhau
Ví dụ: var _vQuery = from book in books select book; <-- luc nay câu query chưa được thực thi chúng ta có thể nối thêm query vào câu query này, đây là cơ chế deferred sẽ được giới thiệu trong phần dưới
Khó khăn
LINQ-Object được sử dụng để truy lục generic collection mà ở đây thực thi System.Collec-
tions.Generic.IEnumerable<T> interface (Ví dụ như các kiểu List<T> vvv). Nhưng các kiểu không phải là generic thì chúng ta cần phải cast chẳng hạn như ArrayList, chúng ta có thể sử dụng ArrayList.Cast, hoặc query expression
ArrayList books = GetArrayList(); var query = from book in books.Cast<Book>() where book.PageCount > 150 select new { book.Title, book.Publisher.Name }; dataGridView.DataSource = query.ToList(); var query = from Book book in books where book.PageCount > 150 select new { book.Title, book.Publisher.Name };
Book: chính là object Book trong dataContext
Ở đây chúng ta sẽ thấy cú pháp select new {} - kiểu Anonymous có thể sử dụng trong việc join
D-IQueryable
Thuận lợi
- Giảm network, giảm sử lý ở client, tận dụng index từ database
Khó khăn
Cả IEnumerable và IQueryable đều được áp dụng cơ chế xử lý deferred query execution (Trì hoãn thực thi truy vấn)
Đây là 1 khái niệm rất quan trọng trong LINQ, nếu không có nó sự thực thi của LINQ sẽ rất tệ
Nó cho phép định nghĩa câu truy vấn tại 1 thời điểm và có thể sử dụng nó cho sau này
Khi bạn sử dụng với database theo tôi nên sử dụng LINQ-SQL, tại sao Microsoft lại đưa ra LINQ-Object, LINQ-SQL, LINQ-XML ... Tại sao lại không sử dụng LINQ-Object cho tất cả trường hợp?
Giả sử khi tôi truy lục
var subjects = dataContext.GetTable<Subject>().ToList<Subject>();
Nó sẽ được xử lý bởi LINQ-Object chứ không phải là LINQ - SQL
Bằng việc chuyển đổi sang List hoặc Array (trả về kiểu IEnumerable) chúng ta sẽ mất đi lợi ích của LINQ-SQL như là tối ưu dữ liệu truy lục, giới hạn dữ liệu đặt trong memory
Nguồn: codepro.vn
Nhận xét
Đăng nhận xét