1. LINQ là gì ?
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.
LINQ là từ viết tắt của “Language-Integrated Query”
2. Tôi cần có gì để lập trình LINQ ?
LINQ có từ bản .NET 3.5, vậy nên tối thiểu chương trình của bạn phải chạy trên nền tảng này.
Visual Studio 2008, hoặc các phiên bản Express của nó là các bộ công cụ phát triển tiêu biểu cho ứng dụng dùng LINQ.
Tải về Visual Studio 2008 tại đây.
Tải về Visual Studio Express tại đây.
3. LINQ và ADO.NET khác nhau chỗ nào ?
Nôm na, LINQ là tập mở rộng cho phép viết các câu truy vấn ngay trong các ngôn ngữ lập trình. Nó cho phép bạn làm việc với các kiểu tập hợp dữ liệu, như XML, collection, array,… và cả CSDL.
ADO.NET là công nghệ cho phép các ứng dụng có thể kết nối và làm việc với các loại CSDL khác nhau (truy vấn, cập nhật, thêm, xóa, gọi thủ tục…).
Bản thân LINQ không phải là một công nghệ được tạo ra để thay thế ADO.NET, bạn có thể làm việc với LINQ mà không dính gì đến CSDL. Tuy nhiên, LINQ to SQL, là một phần mở rộng của LINQ, cho phép bạn có thể làm việc được với CSDL SQL Server, trong trường hợp này thì khi viết bạn có thể bỏ qua các câu lệnh ADO.NET mà chỉ quan tâm tới cú pháp mà LINQ cung cấp.
Nhớ rằng dù bạn không hề dùng đến ADO.NET khi viết chương trình sử dụng LINQ to SQL, nhưng đằng sau nó, ADO.NET vẫn được dùng để thực hiện kết nối, gửi các câu lệnh, các lời gọi thủ tục…
4. LINQ có hỗ trợ Unicode không ?
Có, LINQ là một thành phần của .NET, và như vậy, LINQ hỗ trợ Unicode một cách hoàn toàn tự nhiên, bạn có thể làm các thao tác chèn, sửa dữ liệu với tiếng Việt mà không cần cấu hình thêm. Tất nhiên, khi thiết kế CSDL, bạn vẫn phải chọn kiểu dữ liệu (NVARCHAR) và collation phù hợp để LINQ có thể làm việc một cách đúng đắn.
5. Tôi không thể tìm thấy một số phương thức (Add, RemoveAll…) như các ví dụ trong loạt bài “LINQ to SQL”
Kể từ bản RTM, các phương thức dùng cho thêm và xóa entity đã được đổi tên, cụ thể như sau:
- Add đổi thành InsertOnSubmit
- AddAll đổi thành InsertAllOnSubmit
- Remove đổi thành DeleteOnSubmit
- RemoveAll đổi thành DeleteAllOnSubmit
6. LINQ và LINQ to SQL liên quan gì với nhau?
LINQ là một tập hợp các công nghệ cho phép bạn thay đổi cách truy xuất vào các nguồn dữ liệu ngay từ cấp độ ngôn ngữ, các câu truy vấn LINQ có dạng tương tự SQL. LINQ hỗ trợ hầu hết các dạng nguồn dữ liệu khác nhau, bao gồm cả các đối tượng trong bộ nhớ (LINQ to Objects), XML (LINQ to XML), CSDL SQL Server (LINQ to SQL)…
Như vậy LINQ to SQL là phần hỗ trợ việc truy cập vào CSDL SQL Server sử dụng LINQ.
7. So sánh LINQ to SQL với Entity Framework:
Bạn xem bài viết tại đây: https://namdh.wordpress.com/2010/06/30/comparing-linq-to-sql-and-ado-net-entity-framework/
8. Tôi muốn lập trình LINQ với các CSDL khác SQL Server thì phải làm thế nào?
Bạn có thể dùng LINQ với Oracle nhờ LINQ to Oracle: http://linqtooracle.codeplex.com/
Bạn cũng có thể tham khảo DbLinq Project: http://code2code.net/DB_Linq/
9. Biểu thức Lambda là gì?
Bạn có thể đọc bài viết về lambda tại đây: https://namdh.wordpress.com/2009/07/22/lambda-expression/
10. Tôi chỉ muốn trả về một tập giới hạn các cột cần thiết thì phải viết thế nào?
Thông thường, để trả về đối tượng chứa toàn bộ các cột trong bảng, bạn viết:
var r = from c in myContext.Customers select c;
Để lấy về một số cột cụ thể nào đó, bạn có thể viết:
var r = from c in myContext.Customers select new {c.Id, c.Name, c.Address};
Bạn cũng có thể dùng lại một lớp đã khai báo từ trước:
var r = from c in myContext.Customers select new CustomerInfo {Id = c.Id, Name = c.Name, Address = c.Address};
11. Trong ví dụ trên, tôi thấy biến được khai báo bằng var, vậy var là gì?
Bạn có thể xem bài viết về từ khóa var tại đây: https://namdh.wordpress.com/2011/04/26/var-keyword/
12. Tôi muốn xem các ví dụ về LINQ to SQL, tôi có thể tìm ở đâu?
Bạn có thể tham khảo tại đây: http://msdn.microsoft.com/en-us/vbasic/bb688085.aspx
(đang cập nhật tiếp, nếu có thắc mắc, xin hãy để lại comment, những comment không liên quan sẽ bị xóa)