Linq là gì

  -  

LINQ - Language Integrated Query (lâm thời dịch là ngôn từ truy vấn tích hợp) - là phương thức tróc nã vấn dữ liệu xuất phát điểm từ một tập phù hợp dữ liệu. Hôm ni, bọn họ vẫn thuộc khám phá về LINQ cùng cách thức hoạt động của LINQ nhé.

Bạn đang xem: Linq là gì

Nói mang lại xây dựng, chúng ta quan trọng không nói tới tài liệu. Dữ liệu ở chỗ này rất có thể được khởi đầu từ bộ lưu trữ, XML, cơ sở tài liệu (Mysql, Sql Server...)... tốt bất cứ khu vực lưu trữ như thế nào không giống. Bất cứ đọng dữ liệu đó bắt nguồn từ đâu, họ yêu cầu luôn luôn triển khai vấn đề truy tìm vấn tài liệu mang đến nó. Với mỗi mối cung cấp tài liệu khác nhau sẽ có được các cách khác biệt nhằm thực hiện tầm nã vấn.Ví dụ:- Nếu bọn họ bao gồm một list được lưu giữ trong bộ lưu trữ, chúng ta có thể áp dụng for, foreach kết hợp với các biểu thức đối chiếu để truy vấn vấn dữ liệu.- Nếu bọn họ gồm tài liệu trong tệp tin XML, họ cần truy hỏi vấn từng node để có thể chỉ dẫn những bạn dạng ghi hợp lệ.- Nếu bọn họ có tài liệu vào các đại lý tài liệu, chúng ta cần thực hiện tróc nã vấn trong bảng rồi trả về những bạn dạng ghi thích hợp lệ.- ...Có lẽ đây là lý do nhưng mà những kỹ sư Microsoft sẽ thực hiện đúng theo độc nhất vô nhị cách truy hỏi vấn thành 1 nhằm hoàn toàn có thể sử dụng thông thường cho những mối cung cấp tài liệu không giống nhau. LINQ thành lập với được tiếp tế phiên bạn dạng .NET 3.5.

Thành phần cấu thành LINQ

Nguồn dữ liệu.Tạo câu lệnh truy tìm vấn.Thực thi truy nã vấn để lấy hiệu quả.

1. Nguồn dữ liệu

LINQ cung ứng đến bọn họ phần nhiều providers khác nhau nhằm rất có thể truy nã vấn tới những mối cung cấp tài liệu không giống nhau. Dưới đó là bảng providers và giải thích:

Tên providerMô tả
LINQ khổng lồ ObjectsSử dụng LINQ đối với các đối tượng người tiêu dùng collection mà implement từ IEnumerable hoặcIEnumerable (dữ liệu được lưu giữ vào cỗ nhớ). Được thực hiện rộng rãi đặc biệt đối với đông đảo bài bác toán thù đề xuất hiệu năng cao.
LINQ khổng lồ SQLThực hiện nay bản đồ các tables, views, store procedures thành những đối tượng người sử dụng. LINQ đang triển khai truy nã vấn bên trên những đối tượng người tiêu dùng đó bằng phương pháp chuyển đổi qua lại thân đối tượng người tiêu dùng cùng câu lệnh sql.Ngoài tầm nã vấn ta cũng có thể tiến hành thêm/sửa/xóa dữ liệu dựa trên những đối tượng người dùng trên.Hỗ trợ transaction.Ưu điểm: được thực hiện khá nhiều trong thực tế dưới cái brand name Entity Framework hoặc Entity Framework Vi xử lý Core.Nhược điểm: chỉ làm việc với các đại lý dữ liệu là Squốc lộ Server.
LINQ to lớn EntitiesTương trường đoản cú nhỏng LINQ to Squốc lộ tuy vậy cung cấp nhiều nhiều loại đại lý tài liệu.Nhược điểm: sử dụng phức hợp. hầu hết cửa hàng tài liệu ko tương thích thực hiện phổ biến cùng với .Net.

Xem thêm: C Cex - Bitcoin & Cryptocurrency Exchange

LINQ to DataSetsSự kết hợp giữa LINQ và ADO.NET.
LINQ toXMLTruy vấn ban bố vào file XML.

2. Tạo câu lệnh truy nã vấn

Có 2 phương pháp để tạo ra câu truy vấn vấn: cú pháp truy vấn (query syntax) với cú pháp phương thức (method syntax). Và để viết được câu truy vấn vấn bạn cần using tlỗi viện System.Linq.Mình gồm đưa tạo ra class Car cùng list các Car để triển khai ví dụ mang lại bài viết nlỗi sau:

public class Car 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 Car Id = 2, Name = "Toyota", YearOfManufacture = 1880 , new Car Id = 3, Name = "Mazda", YearOfManufacture = 1925 , new Car Id = 4, Name = "VinFast", YearOfManufacture = 2017 , new Car Id = 5, Name = "KIA", YearOfManufacture = 1855 , new Car Id = 6, Name = "BMW", YearOfManufacture = 1946 , new Car Id = 7, Name = "Merc", YearOfManufacture = 1981 , new Car 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 vấn

Sử dụng cú pháp giống như chúng ta tróc nã vấn đại lý tài liệu. Mẫu cú pháp đang nlỗi sau:

var lists = from in < Biều thức lambda>select ví dụ như sau đang hiển thị danh sách những xe có năm phân phối >= 1990.

class Program static void Main(string<> args) var cars = Car.Cars; var danh mục = from cống phẩm in cars where cống phẩm.YearOfManufacture >= 1990 select item; foreach (var thành quả in list) Console.WriteLine(item); /* * Output: * * 1 - Hondomain authority - 1990 * 4 - VinFast - 2017 */ Console.ReadKey(); Các chúng ta cũng có thể xem thêm các phnghiền toán thù truy nã vấn trên đây.Với cách viết nlỗi này, bọn họ sẽ tương đối dề dàng tiếp cận bởi nó tương tự cùng với tróc nã vấn các đại lý tài liệu cơ mà bọn họ đã không hiểu được thực chất của LINQ là gì cần tôi sẽ không đi quá chi tiết. Vì lúc biên dịch, cú pháp tầm nã vấn cũng mang lại cú pháp cách tiến hành.

2.2. Cú pháp phương thức

Là hồ hết cách làm không ngừng mở rộng của IEnumerable hoặc IEnumerable.Với ví dụ bên trên chúng ta thay đổi code nlỗi sau:

class Program static void Main(string<> args) var cars = Car.Cars; var list = cars.Where(f => f.YearOfManufacture >= 1990); foreach (var nhà cửa in list) Console.WriteLine(item); /* * Output: * * 1 - Hondomain authority - 1990 * 4 - VinFast - 2017 */ Console.ReadKey(); Chúng ta xem xét thấy rằng vào hàm Where xuất hiện tsi số khôn xiết ngùng ngoằng (f => f.YearOfManufacture >= 1990). Vậy tyêu thích số đó là gì vậy?Giờ chúng ta hãy xem signature của hàm Where:

public static IEnumerable Where(this IEnumerable source, Func predicate);Ohh, hóa ra nó là 1 trong biểu thức lambdomain authority mà tôi đã kể chi tiết trên trên đây.Giờ chúng ta hãy thử viết một hàm LINQ mới nhỏng sau:

public static class CarExtenstion public static IEnumerable MyQuery(this IEnumerable danh sách, Func myCondition) foreach (var tác phẩm in list) if (myCondition(item)) yield return item; Chúng ta áp dụng hàm đó nlỗi sau:

class Program static void Main(string<> args) var cars = Car.Cars; var danh mục = cars.MyQuery(f => f.YearOfManufacture >= 1990); foreach (var thành công in list) Console.WriteLine(item); /* * Output: * * 1 - Hondomain authority - 1990 * 4 - VinFast - 2017 */ Console.ReadKey(); Đến đây thì họ đang phát âm LINQ sử dụng vào C# ra làm sao và phương pháp viết những hàm LINQ. Cuối thuộc cũng là sự phối hợp giữa cách làm mở rộng, lambda expression với yield return.

3. Thực thi tầm nã vấn để đưa kết quả

Có 2 kịch bạn dạng để thực thi truy vấn vấn:- Trì hoãn thực thi (Deferred Execution): Việc triển khai truy nã vấn chỉ Khi thực hiện foreach nhỏng hình dưới đây

*
Sử dụng giải pháp thực hiện này vẫn giúp:+ Cải thiện tính năng vị chỉ triển khai một đợt.+ Dữ liệu trả về là tiên tiến nhất.- Thực thi tức thì lập tức (Immediate Execution): thực thi ngay lập tức nhanh chóng câu lệnh với trả về kết quả. Để tiến hành tức thì lập tức, bạn cũng có thể sử dụng số đông toán thù tử biến hóa nhỏng ToList, ToArray, ToDictionary... hoặc số đông tân oán tử yếu tố nlỗi First, FirstOrDefault, Last, LastOrDefault...Với ví dụ bên trên, chúng ta sửa code lại nhỏng sau nhằm triển khai câu lệnh ngay lập tức lập tức:

class Program static void Main(string<> args) var cars = Car.Cars; var menu = cars.Where(f => f.YearOfManufacture >= 1990).ToList(); foreach (var tác phẩm in list) Console.WriteLine(item); /* * Output: * * 1 - Honda - 1990 * 4 - VinFast - 2017 */ Console.ReadKey();

4. Lưu ý

Sau Khi mày mò cho đây, bản thân đân oán có nhiều các bạn sẽ hỏi: Tại sao không áp dụng for hoặc foreach kết hợp if nhằm truy hỏi vấn? Hay LINQ tính năng như vậy nào? Theo ý kiến cá thể của chính mình thì câu hỏi thực hiện hay là không áp dụng LINQ còn tùy thuộc vào cách nhìn của mọi người. Mình ưa thích dùng bởi thấy dễ dàng viết, ngắn gọn và dễ debug. Về hiệu năng thì mặc dù LINQ có chậm rì rì hơn đối với Việc sử dụng for hoặc foreach tuy vậy với việc thông số kỹ thuật máy tính, sever xịn nlỗi hiện nay thì khoảng chừng lờ đờ đó cũng ko tác động lắm đến tính năng.Dưới trên đây bản thân có làm một phnghiền so sánh giữa những việc sử dụng for, foreach, LINQ chúng ta 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 thành quả in listGuid) if (!sản phẩm.Contains(text)) continue; count++; return count; private static int FindByLinq(string text, IList listGuid) var danh mục = listGuid.Where(f => f.Contains(text)); return menu.Count(); static IList RandomList() { var d = new List(); for (int i = 0; i Và hiệu quả của một vài lần chạy test như sau:Chỉ hơn kém nhẹm nhau tất cả 6 (ms).

Xem thêm: So Sánh Thị Trường Forex Và Thị Trường Chứng Khoán Forex Hay Chứng Khoán?

*
*
*

Kết luận:

Mình sẽ share đều đọc biết của bản thân về LINQ, cực kỳ ý muốn nó đang hữu dụng mang đến các bạn. Nếu có thắc mắc gì, hãy giữ lại bình luận dưới nhé.