LINQ - Language Integrated Query (tạm dịch là ngôn từ truy vấn tích hợp) - là phương thức truy vấn dữ liệu từ 1 tập hợp dữ liệu. Hôm nay, chúng ta sẽ cùng mày mò về LINQ và phương pháp thức buổi giao lưu của LINQ nhé.
Bạn đang xem: Linq to sql là gì
Nói mang đến lập trình, họ không thể không nhắc đến dữ liệu. Dữ liệu ở đây rất có thể được xuất phát từ bộ nhớ, XML, cơ sở dữ liệu (Mysql, Sql Server...)... Hay bất cứ nơi tàng trữ nào khác. Bất kể dữ liệu đó bắt nguồn từ đâu, bọn họ phải luôn luôn triển khai việc truy vấn tài liệu đến nó. Với mỗi nguồn dữ liệu khác biệt sẽ có những cách không giống nhau để thực hiện truy vấn.Ví dụ:- Nếu chúng ta có một list được giữ trong bộ nhớ, bạn cũng có thể sử dụng for, foreach kết hợp với các biểu thức so sánh để truy hỏi vấn dữ liệu.- Nếu bọn họ có tài liệu trong file XML, bọn họ phải truy vấn từng node để có thể đưa ra các phiên bản ghi thích hợp lệ.- Nếu họ có tài liệu trong cửa hàng dữ liệu, chúng ta phải thực hiện truy vấn trong bảng rồi trả về các phiên bản ghi hòa hợp lệ.- ...Có lẽ đây là lý bởi vì mà các kỹ sư Microsoft đã tiến hành hợp nhất cách truy vấn thành 1 để rất có thể dùng chung cho những nguồn tài liệu khác nhau. LINQ thành lập và hoạt động và được cấp dưỡng phiên bản .NET 3.5.
Thành phần cấu thành LINQ
Nguồn dữ liệu.Tạo câu lệnh truy hỏi vấn.Thực thi truy hỏi vấn để lấy kết quả.1. Mối cung cấp dữ liệu
LINQ cung cấp cho chúng ta những providers khác nhau để có thể truy vấn tới những nguồn dữ liệu khác nhau. Dưới đó là bảng providers và giải thích:
Tên provider | Mô tả |
LINQ khổng lồ Objects | Sử dụng LINQ so với các đối tượng người dùng collection mà implement từ IEnumerable hoặcIEnumerable (dữ liệu được lưu trong cỗ nhớ). Được áp dụng rộng rãi đặc biệt quan trọng đối cùng với những việc cần hiệu năng cao. |
LINQ to SQL | Thực hiện bản đồ các tables, views, store procedures thành những đối tượng. LINQ sẽ triển khai truy vấn bên trên các đối tượng đó bằng phương pháp chuyển lật qua lại giữa đối tượng người sử dụng và câu lệnh sql.Ngoài truy vấn vấn ta cũng rất có thể thực hiện thêm/sửa/xóa dữ liệu dựa vào các đối tượng người sử dụng trên.Hỗ trợ transaction.Ưu điểm: được sử dụng không hề ít trong thực tế dưới cái thương hiệu Entity Framework hoặc Entity Framework Core.Nhược điểm: chỉ thao tác làm việc với cơ sở tài liệu là SQL Server. |
LINQ to Entities | Tương từ như LINQ to SQL nhưng hỗ trợ nhiều loại cửa hàng dữ liệu.Nhược điểm: thực hiện phức tạp. Nhiều cơ sở dữ liệu không tương thích sử dụng chung với .Net. |
LINQ to lớn DataSets | Sự phối kết hợp giữa LINQ cùng ADO.NET. |
LINQ toXML | Truy vấn thông tin trong file XML. |
2. Tạo nên câu lệnh truy vấn
Có 2 cách để tạo ra câu tróc nã vấn: cú pháp tầm nã vấn (query syntax) với cú pháp cách làm (method syntax). Với để viết được câu truy hỏi vấn bạn phải using tủ sách System.Linq.Mình gồm đưa tạo thành class car và danh sách các Car để làm ví dụ cho bài viết như sau:
public class oto public int Id get; set; public string Name get; set; public int YearOfManufacture get; set; public override string ToString() return string.Format("0 - 1 - 2", Id, Name, YearOfManufacture); public static IList Cars get return new list new car Id = 1, Name = "Honda", YearOfManufacture = 1990 , new oto Id = 2, Name = "Toyota", YearOfManufacture = 1880 , new oto Id = 3, Name = "Mazda", YearOfManufacture = 1925 , new oto Id = 4, Name = "VinFast", YearOfManufacture = 2017 , new oto Id = 5, Name = "KIA", YearOfManufacture = 1855 , new car Id = 6, Name = "BMW", YearOfManufacture = 1946 , new car Id = 7, Name = "Merc", YearOfManufacture = 1981 , new oto Id = 8, Name = "Abc", YearOfManufacture = 1920 , new car Id = 9, Name = "Def", YearOfManufacture = 1940 , new car Id = 10, Name = "Gij", YearOfManufacture = 1944 ;
2.1. Cú pháp truy vấn
Sử dụng cú pháp y hệt như bạn tầm nã vấn đại lý dữ liệu. Mẫu mã cú pháp đã như sau:var lists = from in < Biều thức lambda>select lấy ví dụ như sau đang hiển thị danh sách các xe tất cả năm tiếp tế >= 1990.
class Program static void Main(string<> args) var cars = Car.Cars; var danh sách = from thành công in cars where item.YearOfManufacture >= 1990 select item; foreach (var thắng lợi in list) Console.WriteLine(item); /* * Output: * * 1 - Honda - 1990 * 4 - VinFast - 2017 */ Console.ReadKey(); Các bạn cũng có thể tham khảo các phép toán truy nã vấn trên đây.Với phương pháp viết như này, họ sẽ rất dễ dàng tiếp cận vì chưng nó tương tự với truy vấn vấn cơ sở tài liệu nhưng chúng ta sẽ không hiểu được thực chất của LINQ là gì bắt buộc tôi sẽ không đi quá bỏ ra tiết. Bởi vì khi biên dịch, cú pháp truy tìm vấn cũng đưa về cú pháp phương thức.
2.2. Cú pháp phương thức
Là mọi phương thức không ngừng mở rộng của IEnumerable hoặc IEnumerable.Với lấy ví dụ như trên bọn chúng ta biến đổi code như sau:
class Program static void Main(string<> args) var cars = Car.Cars; var các mục = cars.Where(f => f.YearOfManufacture >= 1990); foreach (var công trình in list) Console.WriteLine(item); /* * Output: * * 1 - Honda - 1990 * 4 - VinFast - 2017 */ Console.ReadKey(); Chúng ta xem xét thấy rằng trong hàm Where lộ diện tham số khôn xiết loằng ngoằng (f => f.YearOfManufacture >= 1990). Vậy tham số sẽ là gì vậy?Giờ bọn họ hãy coi signature của hàm Where:
public static IEnumerable Where(this IEnumerable source, Func predicate);Ohh, hóa ra nó là một biểu thức lambda mà mình đã đề cập cụ thể tại đây.Giờ chúng ta hãy demo viết một hàm LINQ new như sau:
public static class CarExtenstion public static IEnumerable MyQuery(this IEnumerable list, Func myCondition) foreach (var tác phẩm in list) if (myCondition(item)) yield return item; Chúng ta sử dụng hàm kia như sau:
class Program static void Main(string<> args) var cars = Car.Cars; var menu = cars.MyQuery(f => f.YearOfManufacture >= 1990); foreach (var cống phẩm in list) Console.WriteLine(item); /* * Output: * * 1 - Honda - 1990 * 4 - VinFast - 2017 */ Console.ReadKey(); Đến trên đây thì bọn họ đã gọi LINQ thực hiện trong C# thế nào và giải pháp viết những hàm LINQ. ở đầu cuối cũng là sự kết hợp giữa cách làm mở rộng, lambda expression và yield return.
3. Tiến hành truy vấn để lấy kết quả
Có 2 kịch bản để triển khai truy vấn:- Trì hoãn thực thi (Deferred Execution): việc thực hiện truy vấn chỉ khi triển khai foreach như hình dưới đây

class Program static void Main(string<> args) var cars = Car.Cars; var menu = cars.Where(f => f.YearOfManufacture >= 1990).ToList(); foreach (var tòa tháp in list) Console.WriteLine(item); /* * Output: * * 1 - Honda - 1990 * 4 - VinFast - 2017 */ Console.ReadKey();
4. Lưu ý
Sau khi khám phá đến đây, bản thân đoán bao gồm nhiều bạn sẽ hỏi: nguyên nhân không thực hiện for hoặc foreach phối kết hợp if để truy vấn? tuyệt LINQ hiệu năng như thế nào? Theo quan liêu điểm cá nhân của bản thân thì câu hỏi sử dụng hay không sử dụng LINQ còn tùy trực thuộc vào quan điểm của từng người. Mình thích dùng do thấy dễ dàng viết, ngắn gọn với dễ debug. Về tính năng thì tuy vậy LINQ bao gồm chậm rộng so với việc thực hiện for hoặc foreach tuy nhiên với việc cấu hình máy tính, máy chủ khủng như hiện nay thì khoảng tầm chậm đó cũng không ảnh hưởng lắm mang đến hiệu năng.Dưới đây mình tất cả làm một phép đối chiếu giữa việc thực hiện for, foreach, LINQ các bạn hãy tham khảo nhé:class Program { static void Main(string<> args) var text = "531d"; var listGuid = RandomList(); var stopWatch = new Stopwatch(); stopWatch.Start(); var count = FindByFor(text, listGuid); stopWatch.Stop(); var ms = stopWatch.Elapsed.TotalMilliseconds; Console.WriteLine("For Execution Time: " + ms + " (ms). Count: " + count + " (items)"); stopWatch.Restart(); count = FindByForeach(text, listGuid); stopWatch.Stop(); ms = stopWatch.Elapsed.TotalMilliseconds; Console.WriteLine("Foreach Execution Time: " + ms + " (ms). Count: " + count + " (items)"); stopWatch.Restart(); count = FindByLinq(text, listGuid); stopWatch.Stop(); ms = stopWatch.Elapsed.TotalMilliseconds; Console.WriteLine("Linq Execution Time: " + ms + " (ms). Count: " + count + " (items)"); Console.ReadKey(); private static int FindByFor(string text, IList listGuid) { var length = listGuid.Count; var count = 0; for (int i = 0; i listGuid) var count = 0; foreach (var sản phẩm in listGuid) if (!item.Contains(text)) continue; count++; return count; private static int FindByLinq(string text, IList listGuid) var các mục = listGuid.Where(f => f.Contains(text)); return list.Count(); static IList RandomList() { var d = new List(); for (int i = 0; i Và công dụng của một số trong những lần test như sau:Chỉ hơn yếu nhau bao gồm 6 (ms).
Xem thêm: Tìm Hiểu Rpm Hiển Thị Là Gì ? Tìm Hiểu Ý Nghĩa Các Chỉ Số Trong Google Adsense



Kết luận:
Mình đã chia sẻ những đọc biết của bản thân mình về LINQ, rất mong nó sẽ hữu dụng cho những bạn. Ví như có thắc mắc gì, hãy vướng lại comment dưới nhé.