LINQ


LinQ là gì? Chắc chắn không ăn được, nhưng có thể hỗ trợ kiếm tiền mua thức ăn.
Thật ra mình không có ý dồn cả đống kiến thức về LinQ bỏ vào blog. Nên tốt nhất trong bài viết này, chúng ta sẽ giải quyết 4 từ để hỏi sau: What? Why? When?  và How?

What? – LINQ là gì?

LINQ với tên đầy đủ là Language – Integrated Query (Ngôn ngữ tích hợp truy vấn). LINQ có từ bản .NET Framework 3.5, vậy nên tối thiểu chương trình phải chạy trên nền tảng này.

Là  tập các từ khóa tích hợp trong ngôn ngữ lập trình ( C# 3.0+ & VB.Net 9.0+), các câu lệnh truy vấn dữ liệu, dùng để truy vấn đến các nguồn dữ liệu khác nhau.

Kiến trúc LINQ:

understandinglinq

Compilers (Language-level support): Tầng hỗ trợ cho các ngôn ngữ được hỗ trợ Linq.
Tầng 2: Hỗ trợ các toán tử dùng trong câu lệnh truy vấn Linq (Standard Query Operators), nối các toán tử trước khi thực hiện câu lệnh truy vấn Linq (Expression Trees).
Tầng LINQ-Enabled Data Sources: Tầng trung gian hỗ trợ các đối tượng (objects) làm việc với các nguồn dữ liệu cụ thể (Objects, CSDL Quan hệ – Relational, XML).
+ Làm việc với Objects: LINQ to Objects
+ Làm việc với CSDL: LINQ-Enabled ADO.NET

LINQ to Datasets: Làm việc với dữ liệu lưu trữ trong Datasets
LINQ to SQL: Truy vấn đến dữ liệu từ hệ quản trị CSDL SQL
LINQ to Entities: Làm việc với đối tượng Entities

+ Làm việc với tài liệu XML: LINQ to XML (XLinq)

*Note:
Trước đây, do Linq chưa hỗ trợ cho các đối tượng hệ quản trị CSDL ngoài SQL (MySQL, Oracle) và để làm việc được đến các dữ liệu trong hệ quản trị CSDL đó chúng ta dùng công nghệ ADO.NET, đọc dữ liệu để trả về lưu trữ trong các Dataset (sử dụng LINQ to Datasets).

Nhưng, sau đó, LinqConnect Express là giải pháp nhanh gọn dễ dùng được ưa chuộng khi ra đời, điều này làm ADO.NET thất tình với lập trình viên. Sử dụng tương tự như LINQ to SQL. Tải về tại địa chỉ

https://marketplace.visualstudio.com/items?itemName=DevartSoftware.LinqConnectExpress-LINQtoSQLSolutionforanyDatabase

Code mẫu (C#):

using System;
using System.Linq;
using System.Collections.Generic;

class app {
  static void Main() {

  string[] names = { "Burke", "Connor", "Frank",
                       "Everett", "Albert", "George",
                       "Harris", "David" };
//Truy van voi Linq, có các từ khóa (toán tử): from,where,orderby,select
// Cách 1: Cú pháp Query syntax
IEnumerable<string> query = from s in names
                               where s.Length == 5
                               orderby s
                               select s.ToUpper();
// Cách 2: Cú pháp Method syntax
// "=>": "go to"
IEnumerable<string> query = names.Where(s=> s.Length == 5)
                                 .OrderBy(s =>s)                                 
                                 .Select(s => s.ToUpper());
    foreach (string item in query)
      Console.WriteLine(item);
  }
}

hoặc

// 1 Lambda Expressions   "s => s.Length == 5"
Func<string, bool>   filter  = s => s.Length == 5;
Func<string, string> extract = s => s;
Func<string, string> project = s => s.ToUpper();

IEnumerable<string> query = names.Where(filter) 
                                 .OrderBy(extract)
                                 .Select(project);
// 2
Func<string, bool>   filter  = delegate (string s) {
                                   return s.Length == 5; 
                               };
Func<string, string> extract = delegate (string s) { 
                                   return s; 
                               };
Func<string, string> project = delegate (string s) {
                                   return s.ToUpper(); 
                               };
IEnumerable<string> query = names.Where(filter) 
                                 .OrderBy(extract)
                                 .Select(project);

và khi compile đoạn code trên ta sẽ nhận được:

BURKE
DAVID
FRANK

LINQ Samples:

https://code.msdn.microsoft.com/LINQ-Sample-Queries-13a42a54
https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

Các namespace hỗ trợ LINQ:

System.Linq; // hỗ trợ sử dụng các Objects
System.Data.Linq; // hỗ trợ sử dụng các CSDL
System.Data.Objects; // hỗ trợ sử dụng các Entities
System.XML.Linq; // hỗ trợ sử dụng XML

 

Why? – Tại sao phải dùng LINQ?

Ứng dụng (Di động, desktop, web, …) ngày nay khó tránh khỏi việc thao tác và xử lý dữ liệu (data) – (lưu trữ dữ liệu vào bộ nhớ chính). Những dữ liệu này có thể từ nhiều nguồn khác nhau, điều này đòi hỏi người lập trình phải hiểu rõ ngôn ngữ truy vấn dữ liệu tương ứng với nguồn dữ liệu. Ví dụ:

– Dữ liệu từ hệ cơ sở dữ liệu, người lập trình phải biết ngôn ngữ truy vấn dữ liệu tương ứng là SQL.
– Dữ liệu từ các tài liệu XML, người lập trình phải sử dụng cú pháp truy vấn như XPath.

Như vậy, có thể thấy, không lập trình viên nào biết được tất cả các ngôn ngữ truy vấn của từng hệ cơ sở dữ liệu, nguồn dữ liệu cần trích xuất và xử lý. Cũng không lập trình viên nào biết tất cả các ngôn ngữ lập trình phần mềm. Đây là trở ngại lớn đối với người lập trình và công ty phần mềm (mướn thêm nhân công).

LINQ ra đời để giải quyết vấn đề trên và là nhu cầu thiết thực.

– Trong môi trường .NET, dữ liệu trong bộ nhớ thường được thể hiện ở dạng các đối tượng. LINQ giúp móc nối các đối tượng đó và thực hiện các thao tác truy vấn theo nhu cầu.

– Trước đây, cách phổ biến nhất để ứng dụng lấy dữ liệu từ các hệ cơ sở dữ liệu (CSDL) là sử dụng SQL (Structure Query Language – ngôn ngữ truy vấn cấu trúc). SQL có cú pháp rất khác với những ngôn ngữ lập trình phổ dụng như C# và VB.NET, do vậy lập trình viên phải thực hiện khá nhiều công đoạn để kết nối hai thực thể khác biệt này với nhau trong mỗi dự án phần mềm. LINQ ra đời để đơn giản hóa việc kết nối dữ liệu với phần mềm.

– Nếu muốn truy cập dữ liệu XML hay dạng khác (như trang HTML, email…), bạn phải sử dụng cú pháp truy vấn khác (XPath/XQuery). Và LINQ, anh hùng thời đại.

–  Trước đây chưa có chuẩn quy tắc chung nào để truy vấn dữ liệu từ nhiều nguồn khác nhau. LINQ ra đời, biến những cái riêng thành 1 cái chung nhất, quy chuẩn, bằng 1 cách duy nhất để truy cập dữ liệu từ bất kể nguồn dữ liệu nào với cú pháp giống nhau, tiết kiệm thời gian, dễ bảo trì code.

When? – Sử dụng LINQ hợp lý, khi nào?

Phần này hơi thừa nhỉ? Nhưng có phải lúc nào cũng dùng LINQ ? Tùy mỗi người.
Bạn nên tự đặt câu hỏi này cho mình khi triển khai dự án phần mềm, so sánh giữa các công nghệ để sử dụng hiệu quả. Một vấn đề nên được đặt ra: Ưu, nhược của LINQ. Luôn có sự so sánh giữa công nghệ, nền tảng cũ và mới.

vd: So sánh giữa ADO.NET và LINQ to SQL, giữa LINQ to SQL và Entity Framework,…

How? – Cách sử dụng LINQ?

Không đâu đầy đủ bằng hướng dẫn từ MSDN =)) Cơ bản cứ làm việc với dữ liệu là Select, Insert, Update,Delete. Và cùng các từ khóa như from, where, groupby, orderby,select,…

http://www.c-sharpcorner.com/UploadFile/3d39b4/simple-select-insert-update-and-delete-using-linq-to-sql/
https://msdn.microsoft.com/en-us/library/bb397897.aspx
https://msdn.microsoft.com/en-us/library/mt693265.aspx
https://msdn.microsoft.com/en-us/library/bb882664(v=vs.110).aspx

Tham Khảo

[Articles]
https://msdn.microsoft.com/en-us/library/bb308959.aspx
https://www.tutorialspoint.com/linq/linq_overview.htm

[Sách]
C# in Depth
https://www.pdf-archive.com/2014/08/16/c-in-depth-3rd-edition-jon-skeet/c-in-depth-3rd-edition-jon-skeet.pdf
http://csharpindepth.com/Contents.aspx
Microsoft Visual Csharp 2013 step by step
https://mitseu.files.wordpress.com/2014/08/microsoft_visual_c-sharp__2013_step_by_step.pdf

 

Đó là những gì mình muốn giới thiệu về LINQ. Để hiểu và sử dụng LINQ chặt chẽ, bạn cần research nhiều thêm nhé! Có câu hỏi hay trao đổi, bạn comment cuối bài viết là được ^^

bye bye


Cảm ơn bạn đã theo dõi blog.
Nhiều ngày tốt lành!

Advertisements

Cho mình biết cảm nhận của bạn nhé

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s