我在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)计算属性,并根据它进行排序。
有办法吗?