Chatbox

Các bạn vui lòng dùng từ ngữ lịch sự và có văn hóa,sử dụng Tiếng Việt có dấu chuẩn. Chúc các bạn vui vẻ!
05/01/2012 10:01 # 1
khanhdtq
Cấp độ: 2 - Kỹ năng: 2

Kinh nghiệm: 4/20 (20%)
Kĩ năng: 6/20 (30%)
Ngày gia nhập: 27/09/2010
Bài gởi: 14
Được cảm ơn: 16
Giới thiệu chung về LINQ


Giới thiệu về LINQ
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 là một sự đổi mới trong Visual Studio 2008 và .NET Framework 3.5 là cầu nối khoảng cách giữa thế giới của các đối tượng với thế giới của dữ liệu. Theo truyền thống các câu truy vấn trên dữ liệu được thể hiện một cách dễ dàng giống như các chuỗi kí tự đơn giản mà không cần đến kiểu kiểm tra tại thời điểm biên dịch hoặc sự hỗ trợ của trình hỗ trợ trực quan. Hơn nữa bạn cần phải tìm hiểu một ngôn ngữ truy vấn khác nhau cho mỗi loại dữ liệu liệu nguồn khác nhau như: Cở sở dữ liệu SQL, tài liệu XML, các dịch vụ Web. LINQ làm cho một truy vấn một lớp đầu tiên xây dựng trong ngôn ngữ C# và Visual Basic. Bạn viết một câu truy vấn dựa trên tập hợp các đối tượng bằng cách sử dụng ngôn ngữ, các từ khóa các toán tử quen thuộc. Ví dụ minh họa sau đây cho thấy một phần câu truy vấn được hoàn thành dựa trên cơ sở dữ liệu SQL Server trong C# với đầy đủ loại kiểm tra và sự hỗ trợ của trình hỗ trợ trực quan.



Trong Visual Studio 2008 bạn có thể viết các câu truy vấn LINQ trong Visual Basic hoặc C# với cơ sở dữ liệu SQL Server, các tài liệu XML, ADO.NET Datasets và bất kỳ tập đối tượng được hỗ trợ IEnumerable hoặc có đặc điểm chung giống giao diện IEnumerable<T>. LINQ hỗ trợ cho các thực thể ADO.NET Framework và LINQ đang được các nhà cung cấp hiện nay viết bởi bên thứ ba cho nhiều dịch vụ Web và các triển khai dữ liệu khác. Bạn có thể sử dụng các truy vấn LINQ trong các dự án mới hoặc trong các dự án hiện có. Một yêu cầu duy nhất là các dự án đó được xây dựng trên .NET Framework 3.5.

Giới thiệu về các truy vấn LINQ
Trong ví dụ trước vì dữ liệu là một mảng, nó hoàn toàn hỗ trợ đặc điểm chung giao diện IEnumerable <T>. Điều này có nghĩa thực tế nó có thể được truy vấn với LINQ. Một truy vấn được thực hiện trong một câu lệnh foreach và foreach yêu cầu IEnumerable hay IEnumerable(T). Loại có hỗ trợ IEnumerable(T) hoặc một giao diện như IQueryable(T) được gọi là các loại queryable. Một loại queryable không yêu cầu phải sửa đổi hay xử lý đặc biệt để phục vụ một LINQ nguồn dữ liệu. Nếu các nguồn dữ liệu không phải là đã có trong bộ nhớ như là một loại queryable, một nhà cung cấp LINQ phải đại diện cho nó như vậy. Ví dụ, LINQ to XML một tài liệu XML vào một queryable XElement:Một câu truy vấn là một biêu thức gọi ra dữ liệu từ dữ liệu nguồn. Câu truy vấn thường nói rõ trong ngôn ngữ truy vấn đữ được thiết kế cho mục dích riêng. Các ngôn ngữ khác nhau đã được phát triển theo thời gian cho các loại dữ liệu ngồn, ví dụ như SQL dành cho cơ sở dữ liệu quan hệ và XQuery dành cho XML. Vì vậy các nhà phát triển đã tìm hiểu một ngôn ngữ truy vấn mới cho các loại dữ liệu nguồn hoặc các định dạng mà họ phải hỗ trợ. LINQ đơn giản tình trạng này bằng cách cung cấp một mô hình nhất quán để làm việc với các loại dữ liệu nguồn khác nhau và các định dạng. Trong một truy vấn LINQ bạn phải luôn luôn làm việc với các đối tượng. Bạn sử dụng giống như truy vấn mẫu cơ bản mã hóa và chuyển đổi dữ liệu trong các tài liệu XML, cơ sở dữ liệu SQL, ADO.NET DataSet và cho bất kì một định đạng nào mà một nhà cung cấp LINQ có sẵn.

1. Ba phần của một biểu thức LINQ.

Tất cả các biểu thức LINQ làm việc theo ba thao tác.
1. Có được các dữ liệu nguồn.
2. Tạo các truy vấn.
3. Thực hiện các truy vấn.
Ví dụ trong mã nguồn sau đây cho thấy ba phần của một truy vấn hoạt động như thế nào. Ví dụ sử dụng một mảng số nguyên như là một sự thay thế cho nguồn dữ liệu; tuy nhiên, trong cùng một khái niệm áp dụng cho các nguồn dữ liệu khác cũng có.
Ví dụ này sẽ được giới thiệu đến trong suốt phần còn lại của chủ đề này.

class IntroToLINQ
{
static void Main()
{
// The Three Parts of a LINQ Query:
// 1. Data source.
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
// 2. Query creation.
// numQuery is an IEnumerable<int>
var numQuery = from num in numbers
where (num % 2) == 0
select num;

// 3. Query execution.
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}
}
}



Minh họa sau đây cho thấy các hoạt động truy vấn tìm kiếm được hoàn tất. Trong LINQ việc thực hiện các truy vấn riêng biệt từ bản thân câu truy vấn. Nói cách khác bạn không lấy ra bất kỳ dữ liệu nào bằng cách tạo ra một biến truy vấn.

[IMGhttp://asp.net.vn/Uploads/LINQ/2.jpg[/IMG]


2. Các nguồn dữ liệu.
Trong ví dụ trước vì dữ liệu là một mảng, nó hoàn toàn hỗ trợ đặc điểm chung giao diện IEnumerable <T>. Điều này có nghĩa thực tế nó có thể được truy vấn với LINQ. Một truy vấn được thực hiện trong một câu lệnh foreach và foreach yêu cầu IEnumerable hay IEnumerable(T). Loại có hỗ trợ IEnumerable(T) hoặc một giao diện như IQueryable(T) được gọi là các loại queryable. Một loại queryable không yêu cầu phải sửa đổi hay xử lý đặc biệt để phục vụ một LINQ nguồn dữ liệu. Nếu các nguồn dữ liệu không phải là đã có trong bộ nhớ như là một loại queryable, một nhà cung cấp LINQ phải đại diện cho nó như vậy. Ví dụ, LINQ to XML một tài liệu XML vào một queryable XElement:

foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}


Với LINQ to SQL trước tiên bạn tạo một đối tượng quan hệ được ánh xạ vào lúc thiết kế cái này được làm thủ công hoặc bằng cách sử dụng trình thiết kế đối tượng quan hệ (O/R Designer). Bạn viết các câu truy vấn của bạn dựa trên đối tượng và thi hành LINQ to SQL để xử lý các giao tiếp với cơ sở dữ liệu. Trong ví dụ sau, Customer đại diện cho một bảng trong cơ sở dữ liệu, và Table<Customer> hỗ trợ các đặc tính chung IQueryable<T> mà được bắt đầu từ IEnumerable<T>.

// Create a data source from a SQL Server database.
// using System.Data.Linq;
DataContext db = new DataContext(@"c:\northwind\northwnd.mdf");





3. Truy vấn.
Truy vấn trong ví dụ trước trả về tất cả các số từ mảng số nguyên. Các biểu thức truy vấn chứa ba mệnh đề: from, where, select. (Nếu bạn đang quen với SQL sắp đặt của các mệnh đề là sai vị trí trong SQL). Mệnh đề from dùng để xác định nguồn dữ liệu, mệnh đề where dùng để lọc dữ liệu, mệnh đề select dùng để chọn ra những phần tử được trả về. các mệnh đề này và các mệnh đề truy vấn khác sẽ được thảo luận chi tiết trong phần LINQ Query Expresstions(Hướng dẫn lập trình C#). Lúc này một điểm quan trọng là trong LINQ, các biến truy vấn tựu nó không
hành động và trả về không có dữ liệu. Nó chỉ chứa đựng thông tin đó là yêu cầu từ kết quả trả về khi câu truy vấn được thực hiện tại một số điểm sau.

3.1 Thực thi truy vấn:
Hoãn thực thi:
Cũng giống như trạng thái trước đây, biến truy vấn tự nó chỉ chứa các lệnh truy vấn. Hiện nay sự thực thi của các truy vấn là hoãn lại đến tận khi bạn nhắc lại đối với biến truy vấn trong câu lệnh foreach. Cái này làm cơ sở để quy cho hoãn thực thi và là cái điển hình trong ví dụ sau:

foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}



Câu lệnh foreach là nơi các kết quả truy vấn được trả về ví dụ các truy vấn trước đó biến num được lặp và nắm dữ mỗi giá trị trong trình tự trả về. Bởi các biến truy vấn tự nó không bao giờ chứa kết quả truy vấn, bạn có thể thực hiện nó thường xuyên như bạn muốn. Ví dụ bạn đang có một cơ sở dữ liệu mà đang được cập nhập liên tục bởi một ứng dụng riêng biệt. Trong ứng dụng của bạn, bạn có thể tạo một truy vấn để lấy ra dữ liệu mới nhất và bạn có thể thi hành nó một cách liên tục tại một khoảng thời gian để lấy kết quả mỗi lần.

3.2 Thực thi bắt buộc tức thời:

Truy vấn mà sự kết hợp thực hiện các chức năng trên một loạt các phần tử nguồn đầu tiên phải lặp đi lặp lại trên những nhần tử. Ví dụ như các truy vấn Count, Max, Average, và First. Những thực thi mà không có một câu lệnh foreach nào rõ ràng bởi vì các truy vấn tự nó phải sử dụng foreach để trả về là một kết quả. Cũng lưu ý rằng các loại truy vấn trả lại một giá trị, không phải là một tập IEnumerable. Các truy vấn sau đây sẽ trả về một số lượng các số trong mảng nguồn:

var evenNumQuery = from num in numbers
where (num % 2) == 0
select num;
int evenNumCount = evenNumQuery.Count();
List<int> numQuery2 = (from num in numbers
where (num % 2) == 0
select num).ToList();
// or like this:
// numQuery3 is still an int[]
var numQuery3 = (from num in numbers
where (num % 2) == 0
select num).ToArray();


Tổng quan về thiết kế Object Relational (O R)
Thiết kế đối tượng quan hệ (O / R Designer) cung cấp một hình ảnh thiết kế trực quan cho việc tạo LINQ to SQL để tổ chức các thực thể và sự kết hợp (các mối quan hệ) dựa trên các đối tượng trong một cơ sở dữ liệu. Nói cách khác, các O / R được thiết kế sử dụng để tạo ra một mô hình đối tượng trong một ứng dụng để ánh xạ các đối tượng trong một cơ sở dữ liệu. Nó cũng tạo ra một mạnh kiểu rõ ràng DataContext được sử dụng để gửi và nhận dữ liệu giữa các lớp thực thể và cơ sở dữ liệu. O / R Designer cũng cung cấp tính năng cho việc ánh xạ các thủ tục lưu trữ và các hàm để thục hiện các phương thức trong DataContext trả về các dữ liệu và populating tổ chức các lớp thực thể. Cuối cùng, O / R Designer cung cấp khả năng thiết kế thừa kế các mối quan hệ giữa các lớp thực thể.

O / R Designer tạo ra những file có phần mở rông là .dbml cung cấp cho việc ánh xạ giữa các lớp LINQ to SQL và các đối tượng dữ liệu. O / R Designer cũng tạo ra những kiểu DataContext và tổ chức các lớp thực thể.

O / R Designer có hai khu vực riêng biệt trên bề mặt thiết kế: các thực thể trong của sổ bên trái, và các phương thức trong cửa sổ bên phải. Cửa sổ các thực thể chính là bề mặt thiết kế lớp thực thể, các sự kết hợp, và các bậc kế thừa. Các phương thức trong của sổ bên phảilà bề mặt thiết kế có hiển thị DataContext các phương thức ánh xạ để lưu trữ các thủ tục và hàm.

1. Mở các O / R Designer
Bạn có thể mở các O / R bằng cách thêm một class mới vào dự án O / R Designer là một cách dễ dàng đẻ ánh xạ các đối tượng bởi vì nó chỉ hỗ trợ ánh xạ 1:1các mối quan hệ. Nói cách khác, một lớp thực thể có thể chỉ có một ánh xạ 1:1trong mối quan hệ với một cơ sở dữ liệu hoặc view. Ánh xạ phức tạp, chẳng hạn như ánh xạ một lớp thực thể tham gia vào một bảng, hiện chưa hỗ trợ. Ngoài ra, các nhà thiết kế là một sinh mã tự động một chiều. Điều này có nghĩa là chỉ thay đổi mà bạn thực hiện để các nhà thiết kế bề mặt được phản ánh trong các tập tin code. Hướng dẫn để thay đổi các tập tin code không được phản ánh trong O / R Designer. Bất kỳ thay đổi nào mà bạn làm thủ công trong các tập tin mã được ghi đè khi thiết kế được lưu và code là tự phục hồi.

2. Cấu hình và tạo ra DataContext

Sau khi bạn thêm một lớp LINQ cho SQL cho một mục dự án và mở O / R Designer thiết kế, các thiết kế bề mặt trống rỗng đại diện một DataContext sẵn sàng để được cấu hình. các DataContext được cấu hình kết nối với các thông tin được cung cấp bởi các phần tử đầu tiên được kéo vào cho việc thiết kế .. Vì vậy, các DataContext được cấu hình bằng cách sử dụng kết nối thông tin từ các phần tử dầu tiên được kéo vào thiết kế bề mặt thiết kế.

3. Tạo tổ chức các lớp mà cơ sở dữ liệu bản đồ để bàn và xem
Bạn có thể tạo các lớp thực thể được ánh xạ từ các bảng và các view bằng cách kéo thả các cơ sở dữ liệu và các view Server Explorer / Explorer Database lên các O / R Designer. Như chỉ định trong phần trước của DataContext được cấu hình kết nối với các thông tin được cung cấp bởi các phần tử đầu tiên được kéo thả vào bề mặt thiết kế. Nếu một mục sau mà sử dụng một kết nối khác sẽ được thêm vào O / R Designer, bạn có thể thay đổi kết nối cho các DataContext.

4. DataContext tạo ra phương pháp gọi thủ tục lưu trữ và các hàm
Bạn có thể tạo DataContext chưa các phương thức mà gọi (được ánh xạ tới) các thủ tục và các hàm lưu trữ bằng cách kéo chúng từ Server Explorer / Explorer Database lên các O / R Designer. Các thủ tục lưu trữ và các hàm được đưa vào các O / R Designer như phương thức của DataContext.

5. Cấu hình một DataContext để sử dụng các thủ tục lưu trữ dữ liệu lưu dữ liệu giữa các lớp thực thể và cơ sở dữ liệu
Như đã nêu trên, bạn có thể tạo DataContext chứa các phương thức gọi các thủ tục lưu trữ và các hàm. Ngoài ra, bạn cũng có thể chỉ định các thủ tục lưu trữ được sử dụng mặc định cho LINQ to SQL để thực hiện hành động insert, update, và delete.

6. Thừa kế và các O / R Designer
Giống như các đối tượng khác, các lớp LINQ to SQL có thể sử dụng được kế thừa và thu được từ các lớp. Trong một cơ sở dữ liệu, các mối quan hệ thừa kế được tạo ra trong một số cách. O / R Designer hỗ trợ các khái niệm về đơn-bảng kế thừa như nó thường triển khai thực hiện trong các hệ thống.


// Vui lòng bổ sung nguồn bài viết nha
khanhdtq



 
Các thành viên đã Thank khanhdtq vì Bài viết có ích:
Copyright© Đại học Duy Tân 2010 - 2024