2011-08-19 40 views
5

Tôi có hai dòng này, thực hiện chính xác điều tương tự. Nhưng được viết khác đi. Đó là thực hành tốt hơn, và tại sao?Phương pháp nào tốt hơn để sử dụng LINQ?

firstRecordDate = (DateTime)(from g in context.Datas 
            select g.Time).Min(); 

firstRecordDate = (DateTime)context.Datas.Min(x => x.Time); 
+2

Tôi nghi ngờ đây là trường hợp tùy chọn cá nhân. Cá nhân tôi thấy rõ ràng hơn và đơn giản hơn nhưng tôi chắc rằng những người khác nghĩ ngược lại. Tôi chắc rằng ai đó sẽ có thể xác nhận liệu họ có biên dịch cho cùng một điều hay không. :) – Chris

Trả lời

6

không có sự khác biệt ngữ nghĩa giữa cú pháp phương pháp và cú pháp truy vấn . Ngoài ra, một số truy vấn, chẳng hạn như truy vấn số phần tử khớp với điều kiện được chỉ định hoặc truy xuất phần tử có giá trị tối đa trong chuỗi nguồn, chỉ có thể hiển thị làm cuộc gọi phương thức.

http://msdn.microsoft.com/en-us/library/bb397947.aspx

Cũng xem ở đây: .NET LINQ query syntax vs method chain

Nó đi xuống đến những gì bạn cảm thấy thoải mái với và những gì bạn thấy là dễ đọc hơn.

+0

+1 ít thú vị đọc. –

1

Cách thứ hai sử dụng biểu thức lambda. Tôi thích nó vì nó nhỏ gọn và dễ đọc hơn (mặc dù một số sẽ dễ đọc hơn).

Ngoài ra, tùy chọn đầu tiên phù hợp hơn nếu bạn có nền SQL.

1

Tôi muốn nói với những gì có thể đọc được hoặc dễ hiểu nhất liên quan đến nhóm phát triển của bạn. Hãy trở lại trong một năm hoặc lâu hơn và xem bạn có thể nhớ rằng LINQ ... tốt, LINQ đặc biệt này rõ ràng là đơn giản vì vậy đó là tranh luận :-)

Thực tiễn tốt nhất cũng khá là ý kiến, bạn sẽ không nhận được một câu trả lời ở đây. Trong trường hợp này, tôi sẽ đi cho mục thứ hai bởi vì nó ngắn gọn và tôi có thể đọc và hiểu nó nhanh hơn lần đầu tiên, mặc dù chỉ nhanh hơn một chút.

1

Cá nhân tôi thích sử dụng các biểu thức lambda hơn. Theo như tôi biết không có sự khác biệt thực sự như bạn nói bạn có thể làm chính xác cùng một điều cả hai cách. Chúng tôi đồng ý tất cả sử dụng lambda vì nó dễ đọc, theo dõi và chọn cho những người không thích SQL.

1

Hoàn toàn không có sự khác biệt về kết quả, giả sử bạn thực sự viết các câu lệnh tương đương ở mỗi định dạng.

Truy cập phần dễ đọc nhất đối với bất kỳ truy vấn cụ thể nào. Các truy vấn phức tạp với các phép nối và nhiều mệnh đề ở đó thường dễ viết/đọc hơn trong cú pháp truy vấn LINQ, nhưng các cú pháp đơn giản thực sự giống như context.Employees.SingleOrDefault(e => e.Id == empId) dễ sử dụng cú pháp chuỗi phương thức. Không có quy tắc chung "tốt hơn" và hai người có thể có sự khác biệt về ý kiến ​​đối với bất kỳ ví dụ cụ thể nào.

1

Không có sự khác biệt ngữ nghĩa giữa hai câu lệnh. Mà bạn chọn hoàn toàn là một vấn đề về sở thích kiểu dáng

1

Bạn có cần dàn diễn viên rõ ràng trong một trong số chúng không? Không phải là thời gian đã là một DateTime?

Cá nhân tôi thích phương pháp thứ hai vì tôi thấy cú pháp phương pháp mở rộng quen thuộc hơn cú pháp LINQ, nhưng nó thực sự chỉ là sở thích cá nhân, chúng thực hiện giống nhau.

Chữ thứ hai được viết chính xác hơn trông giống như chữ đầu tiên là context.Datas.Select(x => x.Time).Min().Vì vậy, bạn có thể thấy cách bạn viết nó với Min(x => x.Time) có thể hiệu quả hơn một chút, bởi vì bạn chỉ hoạt động thay vì hai số

1

Cú pháp đọc truy vấn thực sự được biên dịch thành một chuỗi các cuộc gọi đến các phương thức mở rộng, có nghĩa là hai cú pháp giống nhau về mặt ngữ nghĩa. Cho dù bạn thích kiểu nào thì bạn nên sử dụng kiểu nào.

Các vấn đề liên quan