Hai cách viết trong linq

em chào cả nhà em có một class Studnets như này

class Students
    {
        public int ID { get; set; }
        public int Age { get; set; }
        public string Name { get; set; }
        public float Mark { get; set; }
        public Students(int id,int age,string name,float mark)
        {
            ID = id;
            Age = age;
            Name = name;
            Mark = mark;
        }
        public override string ToString()
        {
            return Name + "---" + Age + "---" + Mark;
        }
    }

hàm main

static void Main(string[] args)
        {
            List<Students> s = new List<Students>()
            {
                new Students(1,20,"do minh nhien",25),
                new Students(2,25,"tran hong",30),
                new Students(3,35,"ha my",15),
                new Students(4,40,"son lam",20),
                new Students(5,15,"duy tri",25),
            };
            var result = from sa in s
                         where sa.Age > 15 && sa.Age < 35
                         select sa;
            var result1 = s.Where(sa => sa.Age > 15 && sa.Age < 35);
           
            Console.WriteLine("cach 1:");
            foreach (var  item in result)
            {
                Console.WriteLine(item.ToString());
            }
            Console.WriteLine("cach 2:");
            foreach (var item in result1)
            {
                Console.WriteLine(item.ToString());
            }
            Console.ReadKey();
        }
    }

thì em thấy có hai cách như em code ở trên để lấy ra sô học sinh có tuổi lớn hơn 15 và nhỏ hơn 35. Cho em hỏi là cách viết nào thì tối ưu hơn và cách nào hay được dùng nhiều hơn ạ .Em cảm ơn

Mình không chuyên C#

Cách viết LINQ là declarative - định nghĩa, còn method dưới là functional - hàm.

Functional thích hợp truy vấn dữ liệu unstructure (log file, text) và semi-structure (json, XML). Câu lệnh xem đối tượng s là blackbox, và chỉ có người lập trình biết bên trong là gì (thông qua biểu thức lamdba, anonymous function). Thứ tự truy vấn (filter, map,…) cũng phải cân nhắc để đạt peformance.

Declarative thêm yêu cầu đối tượng truy vấn có property, kiểu. Declarative chỉ truy vấn trên structure dât. Đối tượng s không là blackbox, mà giống table trong database. Thứ tự truy vấn tuỳ ý vì LINQ tự động reorder lại thứ tự truy vấn để ra kết quả nhanh nhất.

2 Likes

Lôi stopwatch vào đo thời gian thực thi đi là rõ.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?