1

我在 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) 计算属性并基于此排序。

有没有办法做到这一点?

4

0 回答 0