Trong một truy vấn LINQ, bước đầu tiên là xác định nguồn dữ liệu. Trong C# cũng như trong các ngôn ngữ lập trình khác một biến phải được khai báo trước khi nó có thể được sử dụng. Trong một truy vấn LINQ, các từ khoản đến trước để giới thiệu các nguồn dữ liệu (khách hàng) và biến đổi phạm vi (cust).
//queryAllCustomers is an IEnumerable
var queryAllCustomers = from cust in customers select cust;
Biến phạm vi giống như biến lặp đi lặp lại trong một vòng lặp foreach ngoại trừ không có sự lặp lại thực tế xảy ra trong một biểu thức truy vấn. Khi truy vấn được thực hiện, biến vùng sẽ là một tham chiếu đến từng phần tử kế tiếp trong khách hàng. Bởi vì các trình biên dịch có thể suy ra các loại cust, bạn không cần phải chỉ định nó một cách rõ ràng. Nhiều biến số bổ sung có thể được giới thiệu bằng một điều khoản cho phép.
Filtering
Có lẽ các hoạt động truy vấn thông thường nhất là áp dụng một bộ lọc trong các hình thức của một biểu thức Boolean. Bộ lọc làm cho truy vấn trả lại chỉ những yếu tố mà biểu hiện là đúng sự thật. Kết quả là sản xuất bằng cách sử dụng các điều khoản hợp. Các bộ lọc hiệu lực quy định cụ thể mà các yếu tố để loại trừ từ các dãy nguồn. Trong ví dụ sau đây, chỉ những khách hàng có địa chỉ ở London đang quay trở lại.
var queryLondonCustomers = from cust in customers where cust.City == "London"
select cust;
Bạn có thể sử dụng quen thuộc C # logic AND và OR điều hành để áp dụng nhiều biểu thức lọc là cần thiết trong những nơi mà khoản. Ví dụ, để trả lại khách hàng chỉ từ "London" và có tên là "Devon", bạn sẽ viết đoạn mã sau:
where cust.City=="London" && cust.Name == "Devon"
Để trở về khách hàng từ London hay Paris, bạn sẽ viết đoạn mã sau:
where cust.City == "London" || cust.City == "Paris"
Ordering
Thường thì nó là thuận tiện để sắp xếp dữ liệu trả về. Các khoản orderby sẽ gây ra các yếu tố trong chuỗi trở về được sắp xếp theo Comparer mặc định cho loại đang được sắp xếp. Ví dụ, với câu truy vấn sau đây có thể được mở rộng để sắp xếp các kết quả dựa trên các tài sản Name. Vì tên là một chuỗi, các Comparer mặc định thực hiện một sắp xếp thứ tự chữ cái từ A đến Z.
var queryLondonCustomers3 = from cust in customers where cust.City == "London"
orderby cust.Name ascending select cust;
Để có các kết quả theo thứ tự ngược, từ Z tới A, sử dụng orderby ... giảm dần.
Grouping
Các nhóm điều khoản cho phép bạn nhóm các kết quả của bạn dựa trên một khóa mà bạn chỉ định. Ví dụ, bạn có thể chỉ định rằng kết quả sẽ được nhóm lại theo các thành phố để tất cả các khách hàng từ London hay Paris đang ở trong nhóm cá nhân. Trong trường hợp này, cust.City là chìa khóa.
// queryCustomersByCity is an IEnumerable
var queryCustomersByCity = from cust in customers group cust by cust.City;
// customerGroup is an IGrouping
foreach (var customerGroup in queryCustomersByCity)
{
Console.WriteLine(customerGroup.Key);
foreach (Customer customer in customerGroup)
{
Console.WriteLine(" {0}", customer.Name);
}
}
Khi bạn kết thúc một truy vấn với một điều khoản nhóm, kết quả của bạn mang hình thức một danh sách liệt kê. Mỗi phần tử trong danh sách là một đối tượng mà có một thành viên chính và danh sách các yếu tố đó được nhóm lại theo khóa đó. Khi bạn duyệt qua một truy vấn là tạo ra một chuỗi các nhóm, bạn phải sử dụng một vòng lặp foreach lồng nhau. Các vòng lặp ngòai thay đổi qua mỗi nhóm, và các vòng lặp trong nội tâm của mỗi thành viên trong nhóm.
Nếu bạn phải tham khảo các kết quả của một hoạt động nhóm, bạn có thể sử dụng vào từ khóa để tạo ra một định danh có thể được truy vấn thêm. Các truy vấn trả về sau chỉ những nhóm có chứa nhiều hơn hai khách hàng:
Nếu bạn phải tham khảo các kết quả của một hoạt động nhóm, bạn có thể sử dụng vào từ khóa để tạo ra một định danh có thể được truy vấn thêm. Các truy vấn trả về sau chỉ những nhóm có chứa nhiều hơn hai khách hàng:
var custQuery = from cust in customers group cust by cust.City into custGroup
where custGroup.Count() > 2 orderby custGroup.Key select custGroup;
Joining
Tham gia các hoạt động tạo ra mối liên quan giữa trình tự mà không phải là mô hình rõ ràng trong nguồn dữ liệu. Ví dụ, bạn có thể thực hiện tham gia việc tìm kiếm các khách hàng và phân phối những người có cùng vị trí. Trong LINQ các điều khoản tham gia luôn luôn làm việc với các bộ sưu tập các đối tượng thay vì bảng cơ sở dữ liệu trực tiếp.
var innerJoinQuery = from cust in customers
join dist in distributors on cust.City equals dist.City
select new { CustomerName = cust.Name, DistributorName = dist.Name };
Trong LINQ bạn không phải sử dụng tham gia thường xuyên như bạn làm trong SQL bởi vì các phím nước ngoài tại LINQ được đại diện trong các mô hình đối tượng là tài sản nắm giữ một bộ sưu tập của các mặt hàng. Ví dụ, một đối tượng khách hàng có chứa một bộ sưu tập của các đối tượng tự. Thay vì thực hiện một tham gia, bạn truy cập các đơn đặt hàng bằng cách sử dụng ký hiệu dấu chấm:
from order in Customer.Orders...
DangTrung.
Không có nhận xét nào:
Đăng nhận xét