Language-Integrated Query (LINQ) không chỉ là lấy lại dữ liệu. Nó cũng là một công cụ mạnh để chuyển đổi dữ liệu. Bằng cách sử dụng một truy vấn LINQ, bạn có thể sử dụng một chuỗi các nguồn như đầu vào và sửa đổi nó bằng nhiều cách để tạo ra một chuỗi sản lượng mới. Bạn có thể sửa đổi các trình tự chính nó mà không sửa đổi các yếu tố tự bằng cách phân loại và nhóm. Nhưng có lẽ tính năng mạnh nhất của các truy vấn LINQ là khả năng tạo ra loại mới. Điều này được thực hiện trong mệnh đề lựa chọn. Ví dụ, bạn có thể thực hiện các nhiệm vụ sau đây:
- Kết nối nhiều đầu vào chuỗi thành một chuỗi đầu ra duy nhất có một loại mới.
- Tạo các trình tự đầu ra có yếu tố bao gồm chỉ một hoặc một số thuộc tính của mỗi phần tử trong dãy nguồn.
- Tạo các trình tự đầu ra có yếu tố bao gồm kết quả hoạt động thực hiện trên các dữ liệu nguồn.
- Tạo các trình tự đầu ra trong một định dạng khác nhau. Ví dụ, bạn có thể chuyển đổi dữ liệu từ SQL hàng hoặc các tập tin văn bản vào XML.
Đây chỉ là một vài ví dụ nhỏ. Tất nhiên, những biến đổi có thể được kết hợp trong nhiều cách khác nhau trong cùng một truy vấn. Hơn nữa, đầu ra của một chuỗi truy vấn có thể được sử dụng như là các chuỗi đầu vào cho một truy vấn mới.
Bạn có thể sử dụng một truy vấn LINQ để tạo ra một chuỗi đầu ra có chứa các thành phần từ nhiều hơn một chuỗi đầu vào. Ví dụ sau đây cho thấy làm thế nào để kết hợp hai dữ liệu trong cấu trúc bộ nhớ, nhưng cùng một nguyên tắc có thể áp dụng để kết hợp dữ liệu từ nguồn XML hoặc SQL hoặc DataSet. Giả sử hai loại Class sau đây:
class Student
{
public string First { get; set; }
public string Last {get; set;}
public int ID { get; set; }
public string Street { get; set; }
public string City { get; set; }
public List
}
class Teacher
{
public string First { get; set; }
public string Last { get; set; }
public int ID { get; set; }
public string City { get; set; }
}
Ví dụ sau đây cho thấy các truy vấn:
class DataTransformations
{
static void Main()
{
// Create the first data source.
List
{
new Student {First="Svetlana", Last="Omelchenko", ID=111, Street="123 Main
City="Redmond", Scores= new List
new Student {First="Sven", Last="Mortensen", ID=113, Street="125 Main Street",
City="Lake City", Scores= new List
// Create the second data source.
List
{
new Teacher {First="Ann", Last="Beebe", ID=945, City = "Seattle"},
new Teacher {First="Alex", Last="Robinson", ID=956, City = "Redmond"},
new Teacher {First="Michiyo", Last="Sato", ID=972, City = "Tacoma"}
};
// Create the query.
var peopleInSeattle = (from student in students where student.City == "Seattle"
select student.Last) .Concat(from teacher in teachers where teacher.City == "Seattle"
select teacher.Last);
Console.WriteLine("The following students and teachers live in Seattle:");
// Execute the query.
foreach (var person in peopleInSeattle)
{
Console.WriteLine(person);
}
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
Lựa chọn một tập hợp con của mỗi nguồn Element
Có hai cách chính để lựa chọn một tập hợp con của mỗi phần tử trong dãy nguồn:
- Để chọn chỉ là một thành viên của các yếu tố nguồn, sử dụng dấu chấm hoạt động. Trong ví dụ sau đây, giả định rằng một đối tượng khách hàng có chứa một số tài sản công cộng bao gồm một chuỗi đặt tên thành phố. Khi thực hiện, truy vấn này sẽ tạo ra một chuỗi đầu ra của chuỗi.
- var query = from cust in Customers select cust.City;
- Để tạo ra các yếu tố có chứa nhiều hơn một tài sản từ các thành phần mã nguồn, bạn có thể sử dụng một bộ khởi tạo đối tượng với đối tượng là một trong hai tên hoặc loại một ẩn danh. Ví dụ sau đây cho thấy việc sử dụng một loại vô danh để đóng gói hai thuộc tính của mỗi yếu tố khách hàng:
- var query = from cust in Customer select new {Name = cust.Name, City = cust.City};
LINQ truy vấn giúp bạn dễ dàng chuyển đổi dữ liệu giữa các cấu trúc dữ liệu trong bộ nhớ, cơ sở dữ liệu SQL, ADO.NET Các bộ dữ liệu và các dòng hoặc các tài liệu XML. Ví dụ sau đây biến đổi các đối tượng trong một cấu trúc dữ liệu trong bộ nhớ vào các phần tử XML.
class XMLTransform
{
static void Main()
{
// Create the data source by using a collection initializer.
List
{
new Student {First="Svetlana", Last="Omelchenko", ID=111, Scores = new List
new Student {First="Claire", Last="O’Donnell", ID=112, Scores = new List
new Student {First="Sven", Last="Mortensen", ID=113, Scores = new List
};
// Create the query.
var studentsToXML = new XElement("Root",
from student in students
let x = String.Format("{0},{1},{2},{3}", student.Scores[0],
student.Scores[1], student.Scores[2], student.Scores[3])
select new XElement("student",
new XElement("First", student.First),
new XElement("Last", student.Last),
new XElement("Scores", x)
) // end "student"
); // end "Root"
// Execute the query.
Console.WriteLine(studentsToXML);
// Keep the console open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
Mã này tạo ra đầu ra XML sau:
Thực hiện các hoạt động về yếu tố nguồn
Một trình tự đầu ra có thể không chứa bất kỳ thành phần hoặc tính chất nguyên tố từ dãy nguồn. Sản lượng thay vì có thể là một chuỗi các giá trị được tính toán bằng cách sử dụng các yếu tố nguồn như các đối số đầu vào. Các truy vấn đơn giản sau đây, khi nó được thực thi, kết quả đầu ra một chuỗi các chuỗi có giá trị đại diện cho một tính toán dựa trên trình tự mã nguồn của các yếu tố của loại tăng gấp đôi.
class FormatQuery
{
static void Main()
{
// Data source.
double[] radii = { 1, 2, 3 };
// Query.
IEnumerable
// Query execution.
foreach (string s in query)
Console.WriteLine(s);
// Keep the console open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
/* Output:
Area = 3.14
Area = 12.56
Area = 28.26
*/
Không có nhận xét nào:
Đăng nhận xét