2013-08-07 20 views
0

在使用Umbraco更新我們的網站期間,我們從4.7.2升級到4.11.8。OrderBy剃刀和Umbraco的多個屬性4.11.8

在CSHTML-文件我有這個代碼:

foreach(var item in Model.AncestorOrSelf("Master") 
         .Items.First() 
         .PublicationFolder.First() 
         .Children.Where("Visible") 
         .OrderBy("publicationType, date desc")) 

它能正常工作,整理收集首先由publicationType然後由最新日期

在新版本(4.11.8)中,它不再起作用。它給了我一個例外:At least one object must implement IComparable.

如果我寫.OrderBy("publicationType", "date desc"),它不會影響收集。

那麼這是一個錯誤還是我做錯了什麼? 有沒有解決方法?

+0

您是否找到解決方案? – Digbyswift

+0

是的,我找到了解決方案。我會爲此寫一個答案。 – EhMann365

回答

4

我找到了解決方案,因此我需要將集合投射到​​以便它能夠正常工作。

foreach (var item in ((List<DynamicNode>)@Model.AncestorOrSelf("Master") 
    .Items.First() 
    .PublicationFolder.First() 
    .Children.Where("Visible").Items) 
    .OrderBy(t => t.GetPropertyValue("publicationType")) 
    .ThenByDescending(t => t.GetPropertyValue("date"))) 
+0

布賴恩,其實這幾乎是我的答案相同。我們正在鑄造相同的東西,唯一的區別是您正在進行隱式投射,而我正在使用Cast投影法()。 – Digbyswift

0

如果沒記錯,你應該能夠鏈OrderBys

foreach(var item in Model.AncestorOrSelf("Master").Items.First().PublicationFolder.First().Children.Where("Visible").OrderBy("publicationType").OrderByDescending("date")) 
+0

它可能是解決方案,但我得到這個錯誤:_'umbraco.MacroEngines.DynamicNodeList'不包含'OrderByDescending'_的定義。有什麼遺漏嗎? – EhMann365

+0

鏈接的順序似乎覆蓋了鏈的每個部分,所以這有一個有限的用例,並不能解決原始問題。對於我來說,下面的其他解決方案(使用'.ThenByDescending')效果更好,因爲我需要同時訂購幾個不同的屬性,這也是問題的關鍵。很高興知道你可以像這樣連鎖,所以感謝這個答案:) – Dan

1

Where("Visible")擴展返回IQueryable<DynamicNode>所以你應該能夠應用LINQ OrderBy()OrderByDescending()語法此查詢。您可能需要改變,雖然某些位:

foreach(var item in Model.AncestorOrSelf("Master") 
        .Items.First() 
        .PublicationFolder.First() 
        .Children.Where("Visible") 
        .Cast<DynamicNode> // This line is optional 
        .OrderBy(x => x.GetPropertyValue("publicationType") 
        .ThenByDescending(x => x.GetPropertyValue("date")) 

我已經包含了一個可選的線來表示,可以明確地投了dynamic對象DynamicNode對象,然後你可以在視圖中使用智能感知。