覆盖GetAll以更改排序 - 需要示例

时间:2018-03-06 00:36:36

标签: aspnetboilerplate

我正在尝试覆盖AsyncCrudAppService调用 - “GetAll”以更改返回的排序顺序。

enter image description here

首先,重写方法,实际上是正确的方法吗? 如果是的话,我可以举一个例子,因为我对如何使用PagedResultDto<T>返回类型感到有点迷失吗?

如果没有,请告诉我在哪里可以找到。

1 个答案:

答案 0 :(得分:3)

从技术上讲,你可以,但如果可以避免的话,真的不应该在GetAll()进行排序。 CRUD App Services还定义了已被GetAll使用的虚拟方法ApplySorting(),也可以被覆盖。

您可以在调用GetAll()时传递字符串以进行动态排序,它已经可以正常工作。

await _myAppService.GetAll(new PagedAndSortedResultRequestDto() { Sorting = "Name DESC", MaxResultCount = pageSize, SkipCount = skipCount })

如果您希望更好地控制排序行为,例如使用默认值或传入格式更好的查询字符串,请覆盖ApplySorting()

protected override IQueryable<SomeEntity> ApplySorting(IQueryable<SomeEntity> query, PagedAndSortedResultRequestDto input)
{
    var sortBy = "LastModificationTime DESC,CreationTime DESC";

    switch (input.Sorting?.ToLower())
    {
        case "name-asc":
            sortBy = "Name";
            break;

        case "name-desc":
            sortBy = "Name DESC";
            break;
    }

    input.Sorting = sortBy;

    return base.ApplySorting(query, input);
}