Tùy thuộc vào loại LINQ bạn muốn nói.
Đây có phải là linq-to-sql không? Trong trường hợp đó, đó là một orm với tất cả những lợi ích tương tự đến từ việc sử dụng bất kỳ orm khác. Tôi không sử dụng nhiều và không thể nói nhiều hơn.
Đó có phải là đối tượng không? Trong trường hợp đó, bạn đang thực sự nói về một bộ sưu tập các thứ khác: các phương thức mở rộng, các trình vòng lặp lười và một cú pháp hiểu truy vấn.Đó là giới thiệu về thế giới lập trình hàm. Tôi không có nhiều sử dụng cho cú pháp hiểu truy vấn, nhưng đối với phần còn lại, tôi có thể chứng minh tốt nhất với một ví dụ.
Giả sử bạn muốn đọc từng tệp một. Đối với mỗi dòng, bạn muốn kiểm tra xem nó có đáp ứng một số tiêu chí hay không, hãy chuyển đổi một phần của các dòng đó thành một số nguyên và tổng hợp 10 số nguyên đầu tiên trong số đó cũng nằm trong một phạm vi nhất định. Dưới đây là cách cũ bạn sẽ làm điều đó:
int SumXValues(string filename)
{
string line;
int sum = 0;
int count = 0;
using (var rdr = new StreamReader(filename))
{
while ((line = rdr.ReadLine()) != null && count < 10)
{
int val;
if (int.TryParse(line.Substring(3,3))
{
if (val > 4 && val < 25)
{
sum += val;
count ++;
}
}
}
}
return sum;
}
Đây là phương pháp mới:
IEnumerable<string> ReadLines(string filename)
{
string line;
using (var rdr = new StreamReader(filename))
while ((line = rdr.ReadLine()) != null)
yield return line;
}
int SumXValues(string filename)
{
return ReadLines(filename)
.Select(l => l.Substring(3,3))
.Where(l => int.TryParse(l))
.Select(i => int.Parse(i))
.Where(i => i > 4 && i < 16)
.Take(10)
.Sum(i => i);
}
Thông báo mã mới thực sự là ngắn hơn. Nhưng tại sao nó cũng tốt hơn ? Có (ít nhất) 4 lý do:
- Hy vọng rằng nó rõ ràng như thế nào lại có thể sử dụng các chức năng readlines là. Bạn cũng có thể đưa ra yếu tố quan trọng hơn, nhưng vấn đề là chỉ ra cách phong cách này giúp bạn sử dụng lại nhiều mã hơn.
- Tỷ lệ này tốt hơn. Lưu ý tất cả các cuộc gọi hàm chuỗi trong hàm cuối cùng đó. Bạn biết bao nhiêu lần mã sẽ lặp qua các dòng trong tập tin của bạn? Chính xác một lần! Trong thực tế, thậm chí không lâu như nó sẽ ngừng đọc từ tập tin sau khi lấy 10 mục đầu tiên. Và nếu bạn thay đổi nó để trả về một số đếm và sau đó sử dụng ở nơi khác với các phương pháp mở rộng khác? Vẫn chỉ một lần! Điều này cho phép bạn tạo, kết hợp và kết hợp lại kết quả truy vấn của mình khi chạy mà không phải trả thêm chi phí cho các danh sách của bạn.
- Nó có thể duy trì được nhiều hơn. Nếu các tiêu chí thay đổi, thật dễ dàng để phát hiện chính xác "quy tắc" (nếu bạn muốn) mà bạn quan tâm và sửa đổi phần đó.
- Dễ đọc hơn. Điều này cho phép bạn thể hiện mã về những gì nó đang làm thay vì nó hoạt động như thế nào.
Nguồn
2010-02-02 19:09:55
Có bầu chọn để đóng trên cơ sở "chủ quan và tranh luận". Đó là ngu ngốc! Đây là một câu hỏi đơn giản về giá trị duy nhất của LINQ. (Mặt khác, nó chắc chắn là một câu hỏi được sao chép rất nhiều trên SO vì vậy có thể bị đóng vì lý do đó.) –
Tôi sẵn sàng đặt cược chúng là các phiếu "wiki hoặc gần". Đó là chủ quan vì vậy nó có lẽ nên là một câu hỏi wiki. – Greg
Cảm ơn bạn earwicker. Tôi chỉ tò mò, tôi không hiểu tại sao mọi người lại nghĩ đây là một lý do chủ quan. Tôi không biết rằng làm thế nào tôi có thể viết mã trong một tính năng là chủ quan. Cộng đồng những ngày này. Tsk. – nubela