0

在使用 Umbraco 更新我们的网站期间,我们从 4.7.2 升级到了 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"),它不会影响收藏。

那么这是一个错误还是我做错了什么?有解决方法吗?

4

3 回答 3

5

我找到了一个解决方案,所以我需要将集合转换为 aList<DynamicNode>以便它工作。

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")))
于 2013-08-08T10:30:24.577 回答
1

Where("Visible")扩展返回,IQueryable<DynamicNode>因此您应该能够为此查询应用 LINQOrderBy()和语法。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对象,然后您可以在视图中使用智能感知。

于 2013-08-07T15:43:14.080 回答
0

如果没记错的话,您应该能够链接 OrderBys

foreach(var item in Model.AncestorOrSelf("Master").Items.First().PublicationFolder.First().Children.Where("Visible").OrderBy("publicationType").OrderByDescending("date"))
于 2013-08-07T14:14:24.047 回答