我正在尝试为投影模块创建一个自定义排序标准,以根据评级或收藏夹数量对任何内容进行排序。我已将 Orchard.Module.Contrib.Stars 模块中的 StarsPart 和 Orchard.Module.NGM.Favorite 模块中的 FavoritePart 附加到我的内容中。但是这些模块是基于 contrib.Voting 模块的,这些部分没有对应的 ContentPartRecord。
我的问题是如何编写 HQL 查询来对内容进行排序,如果我编写如下查询,那么我会收到“无法将类型对象转换为类型”的Orchard.ContentManagement.DefaultAliasFactory
异常StarsPart
。
if (context.State.SortBy != null)
{
var _SortBy = _tokenizer.Replace(context.State.SortBy, null, new ReplaceOptions { Encoding = ReplaceOptions.NoEncode });
if (!string.IsNullOrWhiteSpace(_SortBy))
{
switch ((string)_SortBy)
{
case "HighestRated":
context.Query.OrderBy(
alias => alias.ContentItem().As<StarsPart>(), x => x.Asc("UserRating"));
break;
case "MostFavorited":
context.Query.OrderBy(
alias => alias.ContentItem().As<FavoritePart>(), x => x.Asc("NumberOfFavorites"));
break;
default:
context.Query.OrderBy(
alias => alias.ContentItem().As<UserViewPart>(), x => x.Asc("TotalViews"));
break;
}
}
}
还有其他方法可以编写此查询吗?