LINQ - Language Integrated Query (trợ thì dịch là ngôn ngữ truy tìm vấn tích hợp) - là phương thức truy hỏi vấn tài liệu xuất phát từ một tập hợp tài liệu. Hôm nay, bọn họ sẽ thuộc tò mò về LINQ và phương pháp buổi giao lưu của LINQ nhé.

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

Nói đến lập trình, bọn họ cấp thiết ko nói tới dữ liệu. Dữ liệu ở chỗ này rất có thể được khởi đầu từ bộ lưu trữ, XML, cửa hàng tài liệu (Mysql, Sql Server...)... tuyệt bất cứ chỗ tàng trữ nào không giống. Bất cứ tài liệu kia khởi đầu từ đâu, họ đề nghị luôn luôn luôn triển khai việc tầm nã vấn tài liệu cho nó. Với mỗi nguồn dữ liệu khác biệt sẽ sở hữu được những phương pháp khác biệt nhằm thực hiện truy tìm vấn.Ví dụ:- Nếu chúng ta có một list được lưu lại trong bộ nhớ, bạn cũng có thể áp dụng for, foreach kết hợp với những biểu thức so sánh để truy tìm vấn tài liệu.- Nếu bọn họ gồm tài liệu trong tệp tin XML, họ phải truy hỏi vấn từng node để hoàn toàn có thể đưa ra các phiên bản ghi hòa hợp lệ.- Nếu họ bao gồm tài liệu trong cơ sở tài liệu, họ đề xuất thực hiện tróc nã vấn trong bảng rồi trả về những bản ghi đúng theo lệ.- ...Có lẽ đấy là nguyên nhân mà các kỹ sư Microsoft vẫn triển khai vừa lòng tuyệt nhất giải pháp truy nã vấn thành 1 để hoàn toàn có thể sử dụng chung cho những mối cung cấp dữ 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 tài liệu.Tạo câu lệnh tầm nã vấn.Thực thi truy hỏi vấn để đưa công dụng.

1. Nguồn dữ liệu

LINQ cung cấp mang lại bọn họ phần đông providers khác nhau nhằm rất có thể truy vấn vấn tới những nguồn dữ liệu khác nhau. Dưới đấy là bảng providers cùng giải thích:

Tên providerMô tả
LINQ khổng lồ ObjectsSử dụng LINQ so với những đối tượng collection nhưng implement từ IEnumerable hoặcIEnumerable (tài liệu được giữ trong bộ nhớ). Được thực hiện rộng thoải mái quan trọng đối với các bài toán thù nên hiệu năng cao.
LINQ lớn SQLThực hiện map các tables, views, store procedures thành những đối tượng người dùng. LINQ vẫn triển khai truy tìm vấn trên các đối tượng đó bằng cách chuyển đổi qua lại thân đối tượng và câu lệnh sql.Ngoài truy vấn ta cũng có thể tiến hành thêm/sửa/xóa dữ liệu dựa vào những đối tượng người dùng bên trên.Hỗ trợ transaction.Ưu điểm: được áp dụng tương đối nhiều trong thực tiễn dưới cái tên Entity Framework hoặc Entity Framework Chip Core.Nhược điểm: chỉ thao tác làm việc cùng với cơ sở tài liệu là SQL Server.
LINQ khổng lồ EntitiesTương tự nhỏng LINQ khổng lồ 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: thực hiện phức hợp. phần lớn cửa hàng tài liệu ko phù hợp sử dụng thông thường cùng với .Net.

Xem thêm: Drivereasy Pro 5 - Grass Valley Edius Pro 8

LINQ to lớn DataSetsSự phối hợp giữa LINQ cùng ADO.NET.
LINQ toXMLTruy vấn biết tin trong file XML.

2. Tạo câu lệnh truy tìm vấn

Có 2 cách để tạo thành câu truy tìm vấn: cú pháp truy hỏi vấn (query syntax) với cú pháp cách tiến hành (method syntax). Và để viết được câu tróc nã vấn bạn cần using thỏng viện System.Linq.Mình có chuyển tạo thành class Car và danh sách những Car để gia công ví dụ mang đến nội dung 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 = 19trăng tròn , new Car Id = 9, Name = "Def", YearOfManufacture = 1940 , new Car Id = 10, Name = "Gij", YearOfManufacture = 1944 ;

2.1. Cú pháp tróc nã vấn

Sử dụng cú pháp giống như các bạn truy hỏi vấn đại lý dữ liệu. Mẫu cú pháp đang nhỏng sau:

var lists = from in < Biều thức lambda>select lấy một ví dụ sau sẽ hiển thị danh sách các xe pháo có năm cung ứng >= 1990.

class Program static void Main(string<> args) var cars = Car.Cars; var danh mục = from item in cars where item.YearOfManufacture >= 1990 select item; foreach (var thành phầm in list) Console.WriteLine(item); /* * Output: * * 1 - Honda - 1990 * 4 - VinFast - 2017 */ Console.ReadKey(); Các bạn có thể tìm hiểu thêm những phép toán thù tróc nã vấn trên phía trên.Với giải pháp viết nhỏng này, chúng ta sẽ khá dễ dàng tiếp xúc vì chưng nó gần giống cùng với truy hỏi vấn cửa hàng tài liệu nhưng mà chúng ta sẽ không hiểu biết được bản chất của LINQ là gì đề nghị tôi sẽ không đi quá cụ thể. Vì Lúc biên dịch, cú pháp truy tìm vấn cũng đem về cú pháp thủ tục.

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

Là hồ hết thủ tục mở rộng của IEnumerable hoặc IEnumerable.Với ví dụ trên họ biến hóa code nlỗi 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 item in list) Console.WriteLine(item); /* * Output: * * 1 - Hondomain authority - 1990 * 4 - VinFast - 2017 */ Console.ReadKey(); Chúng ta chú ý 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 tsay mê số chính là gì vậy?Giờ bọn họ hãy xem signature của hàm Where:

public static IEnumerable Where(this IEnumerable source, Func predicate);Ohh, hóa ra nó là một trong biểu thức lambdomain authority nhưng mà mình đã kể cụ thể trên đây.Giờ bọn họ hãy thử viết một hàm LINQ bắt đầu nhỏng sau:

public static class CarExtenstion public static IEnumerable MyQuery(this IEnumerable danh mục, Func myCondition) foreach (var tác phẩm in list) if (myCondition(item)) yield return item; Chúng ta thực hiện hàm kia nhỏng sau:

class Program static void Main(string<> args) var cars = Car.Cars; var các mục = cars.MyQuery(f => f.YearOfManufacture >= 1990); foreach (var tòa tháp in list) Console.WriteLine(item); /* * Output: * * 1 - Honda - 1990 * 4 - VinFast - 2017 */ Console.ReadKey(); Đến trên đây thì chúng ta vẫn đọc LINQ thực hiện trong C# ra sao và biện pháp viết những hàm LINQ. Cuối cùng cũng là việc phối kết hợp thân phương thức không ngừng mở rộng, lambdomain authority expression cùng yield return.

3. Thực thi truy hỏi vấn để lấy kết quả

Có 2 kịch phiên bản nhằm tiến hành truy tìm vấn:- Trì hoãn thực thi (Deferred Execution): câu hỏi tiến hành tầm nã vấn chỉ Lúc tiến hành foreach như hình bên dưới đây

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

class Program static void Main(string<> args) var cars = Car.Cars; var các mục = cars.Where(f => f.YearOfManufacture >= 1990).ToList(); foreach (var chiến thắng in list) Console.WriteLine(item); /* * Output: * * 1 - Honda - 1990 * 4 - VinFast - 2017 */ Console.ReadKey();

4. Lưu ý

Sau Lúc mày mò đến trên đây, bản thân đoán có rất nhiều các bạn sẽ hỏi: Tại sao không sử dụng for hoặc foreach phối hợp if nhằm tróc nã vấn? Hay LINQ hiệu năng như thế nào? Theo ý kiến cá thể của chính mình thì Việc 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 thích cần sử dụng vày thấy dễ viết, nđính gọn gàng với dễ debug. Về hiệu năng thì tuy vậy LINQ tất cả chậm rì rì rộng so với Việc sử dụng for hoặc foreach tuy vậy với câu hỏi cấu hình máy tính, sever xịn nhỏng hiện thời thì khoảng chừng chậm rãi đó cũng không tác động lắm mang đến hiệu năng.Dưới phía trên bản thân bao gồm làm một phxay đối chiếu giữa những việc sử dụng 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 thắng lợi in listGuid) if (!cống phẩm.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 danh sách.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ỏng sau:Chỉ hơn kém nhau có 6 (ms).

*
*
*

Kết luận:

Mình đang share phần lớn gọi biết của chính bản thân mình về LINQ, rất mong muốn nó đã hữu dụng cho chúng ta. Nếu tất cả vướng mắc gì, hãy để lại phản hồi bên dưới nhé.

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *