我的網站導航有一個類別的概念,有一個描述,圖像和頁面與他們相關聯。Linq to XML這個XML文件讀取多少次?
In _ViewStart.cshtml我有以下LINQ查詢,然後將結果存儲在PageData中,因爲我可能在給定頁面上多次使用類別,並且不想重新運行查詢。
XDocument navigation = XDocument.Load(Server.MapPath("~/App_Data/Navigation.xml"));
IEnumerable<Category> categories = from category in navigation.Root.Descendants("category")
select new Category(
category.Attribute("name").Value,
category.Element("description").Value,
new CategoryImage(
category.Element("image").Element("path").Value,
category.Element("image").Element("cssClass").Value,
category.Element("image").Element("description").Value
),
(from page in category.Descendants("page") select new BetterSolutions.ViewModels.ProductPage(page.Attribute("display").Value, page.Value)).ToList()
);
PageData["categories"] = categories;
當我看到通過調試器會發生什麼,只要我訪問PageData [「類別」]它不斷回到過去的_ViewStart.cshtml查詢。
當我通過在LINQ查詢周圍添加括號並在末尾添加.ToList()來更改上述代碼時,它似乎執行一次,然後再也不會再執行一次。
我應該這樣做的方式是什麼?我認爲添加.ToList()是正確的,因爲查詢似乎只運行一次,但我可能會誤解LINQ to XML中的延遲執行實際上是如何工作的。
這很有道理。當我創建類別時,C#知道查詢的結果將會是IEnumerable?否則,我不應該在編譯時遇到錯誤? –
Jon
是的,查詢的類型是返回'Category'項目的集合。 – MarcinJuraszek
@Jon我不得不修改我的答案。檢查更新。 – MarcinJuraszek