Làm việc với tập lệnh linq quan trọng trong lập trình c#

Trong bài viết này, Stanford - dạy kinh nghiệm lập trình sẽ giúp các bạn học lập trình c# tìm hiểu về linq là gì cũng như làm quen với những hàm quan trọng trong linq để sử dụng trong dự án bằng c#.

1. LINQ LÀ GÌ ?

LINQ viết tắt của từ Language-Integrated Query là ngôn ngữ truy vấn tương tác viết trực tiếp trong code, một cách để truy vấn một tập hợp các dữ liệu bằng cách sử dụng các phuơng thức mở rộng (extension methods). Những hàm mở rộng chỉ có thể truy cập bằng cách thêm using System.Linq;. 

Trong bài viết này bạn sẽ được thực hiện trên danh sách thông tin sinh viên. Với thông tin được mô tả như sau:

Lớp thông tin Student chứa các thuộc tính mô tả về sinh viên:

public class Student
    {
        public int Id { getset; }
 
        public string  Name { getset; }   
 
        public int Age { getset; }   
 
        public Student(int Id, string Name, int Age)
        {
            this.Id = Id;
            this.Name = Name;
            this.Age = Age;
        }   
    }

Lớp viết câu lệnh và chứa hàm lấy danh sách sinh viên sử dụng trong bài viết này:

using System;
using System.Collections.Generic;
 
namespace Stanford_LamViecVoiLinqBasic
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Làm việc với Linq trong lập trình C#");
        }
 
        /*
        Hàm lấy danh sách sinh viên
        */
        static List<Student> GetListStudents()
        {
            List<Student> lstStudent = new List<Student>();
 
            lstStudent.Add(new Student(1, "Nam", 16));
            lstStudent.Add(new Student(2, "Huy", 18));
            lstStudent.Add(new Student(3, "Bình", 22));
            lstStudent.Add(new Student(4, "Lan", 16));
            lstStudent.Add(new Student(5, "Minh", 18));
            lstStudent.Add(new Student(6, "Hoàng", 25));
            lstStudent.Add(new Student(7, "Hạnh", 28));
            lstStudent.Add(new Student(8, "Trung", 25));
            lstStudent.Add(new Student(9, "Sơn", 30));
            lstStudent.Add(new Student(10, "Hà", 22));
            lstStudent.Add(new Student(11, "Trọng", 33));
            lstStudent.Add(new Student(12, "Thành", 32));
            return lstStudent;
        }
    }
}

 

2. TÌM KIẾM VÀ LỌC THÔNG TIN TRONG LINQ

Khi làm việc với Linq, bạn có thể tìm kiếm, lọc thông tin từ một danh sách rất nhanh ngọn, hiệu quả. Cụ thể một số câu lệnh như sau:

2.1. WHERE

Where là phương thức được dùng phổ biến nhất trong LINQ. Hàm này có thể dùng để lọc các phần tử trong một danh sách dựa trên các điều kiện nhất định. Ví dụ: bạn muộn lọc danh sách nhừng sinh viên lớn hơn 30 tuổi. Thì câu lệnh LINQ sẽ như sau: 

//Lấy danh sách sinh viên
List<Student> lstStudents = GetListStudents();
             
//Lấy các sinh viên lớn hơn 30 tuổi
var lstStudent30 = lstStudents.Where(s=>s.Age > 30);

Khi chạy đoạn chương trình trên sẽ cho 2 sinh viên có tên Trọng, Thành thỏa mãn điều kiện lớn hơn 30 tuổi.

2.2. Skip

Sử dụng skip khi bạn muốn bỏ qua hay lấy dữ liệu bắt đầu từ đâu trong danh sách thay vì mặc định từ vị trí đầu tiên, ví dụ có thể lấy sinh viên từ vị trí thứ 5 trở đi.

//Lấy sinh viên từ vị trí 5 trở đi
var lstSinhVienSkip = lstStudents.Skip(5);
 
Console.WriteLine("Họ tên\t Tuổi");
foreach (var item in lstSinhVienSkip)
{
   Console.WriteLine(item.Name + "\t" + item.Age);
}

Danh sách hiển thị thông tin từ sinh viên có tên Hoàng (index = 5 tương ứng với vị trí 6) đến hết danh sách.

2.3. Take

Bạn có thể sử dụng take để lấy số lượng phần tử tính từ vị trí đầu tiên, ví dụ lấy 3 phần tử đầu tiên trong danh sách sinh viên thì câu lệnh như sau:

//Lấy 3 sinh viên
var lstStudent3 = lstStudents.Take(3);

Trong trường hợp thực tế trong dự án, người ta có thể sử dụng kết hợp hàm Skip và Take để lấy dữ liệu theo từng trang để tối ưu về mặt hiệu năng nếu sử dụng linq.

3. LẤY MỘT THUỘC TÍNH TRÊN DANH SÁCH CÁC ĐỐI TƯỢNG

Để thực hiện lấy danh sách thông tin của 1 thuộc tính nào đó trong danh sách sử dụng Linq thực hiện rất dễ dàng bằng cách dùng hàm Select như ví dụ sau: 

//Lấy danh sách tên các sinh viên
List<string> lstStudentsName = lstStudents.Select(s=>s.Name).ToList();
Console.WriteLine("Họ tên");
foreach (var name in lstStudentsName)
{
   Console.WriteLine(name);
}

4. Tìm một phần tử trong danh sách

4.1. FirstOrDefault

Hàm này cho phép bạn lấy được một phần tử đầu trong danh sách, trong trường hợp không lấy được thì sẽ trả về null, ví dụ như sau:

//Hàm lấy thông tin có Id = 3
Student objStu = lstStudents.Where(s=>s.Id == 3).FirstOrDefault();

4.2. LastOfDefault

Hàm trả về phần tử cuối cùng trong danh sách nếu không có thì sẽ trả về null.

//Hàm lấy thông tin cuối cùng trong danh sách
Student objStu2 = lstStudents.LastOrDefault();

4.3. SingleOfDefault

Hàm này sẽ trả về phần tử đầu tiên trong danh sách, nếu không có phần tử nào thỏa mãn thì sẽ trả về giá trị mặc định. Trong trường hợp có nhiều hơn 1 phần tử sẽ trả về lỗi.

Student objStu3 = lstStudents.Where(s=>s.Id == 5).SingleOrDefault();

5. LẤY DỮ LIỆU VỀ DANH SÁCH

5.1. Count

Hàm này đếm số lượng các phần tử có trong danh sách bằng Linq.

//Lấy tổng số sinh viên
int total = lstStudents.Count();

5.2. Any

Hàm sẽ trả về true nếu có bất kỳ phần tử nào được tìm thấy trong danh sách bằng Linq.

bool ketQua  = lstStudents.Any();

Nếu danh sách rỗng thì kết quả của hàm này sẽ trả về false.

5.3. All

Hàm All trái ngược với Any là sẽ chỉ trả về true trong trường hợp tất cả các phần tử trong danh sách phải thỏa mãn điều kiện.

//False
bool grantAge18 = lstStudents.All(s=>s.Age>18);
Console.WriteLine($"Tuổi lớn hơn 18: {grantAge18}");
//True
bool fromAge16 = lstStudents.All(s=>s.Age>=16);
 
Console.WriteLine($"Tuổi lớn hơn bằng 16: {fromAge16}");

6. CHUYỂN ĐỔI DỮ LIỆU VỀ DANH SÁCH

Các kết quả trả về của Truy vấn LINQ thường là IEnumerable<T>, Nếu bạn muốn các kiểu dữ liệu khác, bạn có thể dùng các method sau:

6.1. ToList

Phương thức Tolist cho phép bạn convert từ IEnumerable<T> sang List<T>. Ví dụ: 

//Lấy danh sách sinh viên tuổi trong 20 đến 30 tuổi
List<Student> lstStudent2030 = lstStudents.Where(s=>s.Age>= 20 && s.Age <= 30).ToList();
Console.WriteLine("Họ tên\t Tuổi");
foreach (var item in lstStudent2030)
 {
   Console.WriteLine(item.Name + "\t" + item.Age);
 }

6.2. ToArray

Hàm này cho phép bạn có thể chuyển kết quả từ câu lệnh linq về dạng mảng trong lập trình c#, ví dụ:

Console.WriteLine("Các sinh viên từ 25 tuổi: ");
             
Student[] arrStudents = lstStudents.Where(s=>s.Age >= 25).ToArray();
 
Console.WriteLine("Họ tên\t Tuổi");
foreach (var item in arrStudents)
{
   Console.WriteLine(item.Name + "\t" + item.Age);
}

Hy vọng qua bài viết này các bạn học lập trình c# đã hiểu rõ hơn về linq là gì cũng như sử dụng các hàm quan trọng trong linq để áp dụng xử lý công việc dự án của mình được hiệu quả. Bên cạnh đó nếu bạn muốn được đào tạo bài bản và học kinh nghiệm từ chuyên gia giàu kinh nghiệm của Stanford có thể đăng ký học lập trình c# tại đây: http://bit.ly/2SLPYFF

=============================
☎ STANFORD – ĐÀO TẠO VÀ PHÁT TRIỂN CÔNG NGHỆ
Hotline: 0963 723 236 - 0866 586 366
Website: https://stanford.com.vn
Facebook: http://bit.ly/2FN0TYb
Youtube: http://bit.ly/2TkKT7I

Tags: linq là gì, học linq, học lập trình c#, học linq trong c#, học c# cùng chuyên gia