2012-07-05 36 views
10

Nếu tôi xây dựng một truy vấn nói:C# LINQ - Chậm Thực hiện

(truy vấn là xây dựng sử dụng lớp XDocument từ System.Xml.Linq)

var elements = from e in calendarDocument.Root.Elements("elementName") select e; 

và sau đó tôi gọi elements.Last() Vài lần. Mỗi cuộc gọi sẽ trả về phần tử Last() mới nhất?

Ví dụ nếu tôi làm

elements.Last().AddAfterSelf(new XElement("elementName", "someValue1")); 
elements.Last().AddAfterSelf(new XElement("elementName", "someValue2")); 
elements.Last().AddAfterSelf(new XElement("elementName", "someValue3")); 
elements.Last().AddAfterSelf(new XElement("elementName", "someValue4")); 

là nó thực sự nhận được yếu tố mới nhất mỗi lần và thêm một cái mới đến cùng hay là elements.Last() các yếu tố giống nhau không?

Trả lời

11

Có, truy vấn LINQ được đánh giá lười biếng. Nó không phải cho đến khi bạn gọi Last() rằng truy vấn sẽ được thực hiện. Trong trường hợp này, nó sẽ nhận được cập nhật nhất phần tử cuối cùng mỗi lần.

Tôi nghĩ rằng đây thực sự là lần đầu tiên tôi nhìn thấy việc sử dụng thích hợp gọi Last() (hoặc bất kỳ nhà điều hành nào khác thực hiện truy vấn) nhiều lần. Khi mọi người làm điều đó, thường là do nhầm lẫn gây ra hiệu suất kém.

Tôi nghĩ rằng thư viện LINQ-to-xml đủ thông minh để có được hiệu suất tốt cho truy vấn của bạn, nhưng tôi sẽ không tin tưởng nó mà không cần thử.

+0

Anders, Cảm ơn bạn. Một điều nữa nếu bạn không nhớ .. Làm thế nào tôi có thể làm cho các yếu tố var một biến toàn cầu? Kể từ khi tôi xây dựng các truy vấn chỉ một lần tôi muốn khởi tạo nó và có thể gọi elements.Last() từ bất cứ nơi nào khác trong mã của tôi. Điều này có thể không? – parliament

+0

Đó là câu hỏi mới và riêng biệt. Vui lòng đăng câu hỏi đó dưới dạng một câu hỏi khác (sau khi bạn đã cố gắng tự tìm câu trả lời và đã cố gắng tìm kiếm SO cho các câu hỏi cũ). Hỏi một câu hỏi ở đây có lẽ sẽ không giúp đỡ nhiều, vì câu hỏi được đánh dấu là đã giải quyết, không có người nào nhìn vào nó. –

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