diff --git a/docs/en/Tutorials/Part-10.md b/docs/en/Tutorials/Part-10.md index b578952cc7..f0e24c4853 100644 --- a/docs/en/Tutorials/Part-10.md +++ b/docs/en/Tutorials/Part-10.md @@ -326,6 +326,7 @@ Open the `BookAppService` interface in the `Books` folder of the `Acme.BookStore using System; using System.Collections.Generic; using System.Linq; +using System.Linq.Dynamic.Core; using System.Threading.Tasks; using Acme.BookStore.Authors; using Acme.BookStore.Permissions; @@ -387,23 +388,17 @@ namespace Acme.BookStore.Books public override async Task> GetListAsync(PagedAndSortedResultRequestDto input) { - //Set a default sorting, if not provided - if (input.Sorting.IsNullOrWhiteSpace()) - { - input.Sorting = nameof(Book.Name); - } - //Get the IQueryable from the repository var queryable = await Repository.GetQueryableAsync(); //Prepare a query to join books and authors var query = from book in queryable join author in _authorRepository on book.AuthorId equals author.Id - orderby input.Sorting //TODO: Can not sort like that! select new {book, author}; //Paging query = query + .OrderBy(NormalizeSorting(input.Sorting)) .Skip(input.SkipCount) .Take(input.MaxResultCount); @@ -435,6 +430,25 @@ namespace Acme.BookStore.Books ObjectMapper.Map, List>(authors) ); } + + private static string NormalizeSorting(string sorting) + { + if (sorting.IsNullOrEmpty()) + { + return $"book.{nameof(Book.Name)}"; + } + + if (sorting.Contains("authorName", StringComparison.OrdinalIgnoreCase)) + { + return sorting.Replace( + "authorName", + "author.Name", + StringComparison.OrdinalIgnoreCase + ); + } + + return $"book.{sorting}"; + } } } ```