我在 Orchard 中创建了一个 IsortCriterionProvider,因此我可以按与给定标签列表匹配的标签数量对项目进行排序。
到目前为止,这是我的排序标准函数:
public void ApplySortCriterion(SortCriterionContext context)
{
IEnumberable<int> tagIdsToFilterOn = GetTagIds();
Action<IAliasFactory> selector =
alias => alias.ContentPartRecord<TagsPartRecord>()
.Property("Tags", "tags").Property("TagRecord", "tagRecord");
// Todo: Somehow add return value from GetTagMatchCount()
// into a TagMatchCount property in selector
Action<IHqlSortFactory> filter = x => x.Asc("TagMatchCount");
// apply sort
context.Query = context.Query.OrderBy(selector, filter);
}
public int GetTagMatchCount(IEnumberable<TagRecord> tags,
IEnumberable<int> tagIds)
{
tags.Count(t => tagIds.Contains(t.Id));
}
查询的过滤器需要一个命名属性。我想使用 GetTagMatchCount(tagsOnCurrentItem, tagIdsToFilterOn) 计算属性并基于此排序。
有没有办法做到这一点?