使用聚合函数创建Orchard查询排序条件

时间:2013-08-19 15:13:44

标签: orchardcms

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

有办法吗?

0 个答案:

没有答案