29 lines
1.1 KiB
C#
29 lines
1.1 KiB
C#
using System.Text;
|
|
using System.Linq.Dynamic.Core;
|
|
|
|
namespace LCU.API.Internal.LoanRateLoadTestingLib.Extensions.Queryables;
|
|
public static class SortableFieldsQueryable
|
|
{
|
|
public static IQueryable<LoadTestRunInfo> OrderBySortableFields(this IQueryable<LoadTestRunInfo> queryable, LoadTestRunInfoFilter loadTestRunInfoFilter)
|
|
{
|
|
var sortableFields = loadTestRunInfoFilter.SortableFields
|
|
.Where(sortableField => sortableField.Active && sortableField.Position >= 0)
|
|
.OrderBy(sortableField => sortableField.Position).ToList();
|
|
|
|
if (sortableFields == null || !sortableFields.Any())
|
|
{
|
|
return queryable;
|
|
}
|
|
|
|
var orderBy = new StringBuilder();
|
|
foreach (var field in sortableFields)
|
|
{
|
|
var addedComma = orderBy.ToString() == "" ? "" : " ,";
|
|
var desc = field.IsDescending ? " desc" : "";
|
|
orderBy.Append($"{addedComma}{field.Field}{desc}");
|
|
}
|
|
|
|
return queryable.OrderBy(orderBy.ToString());
|
|
}
|
|
}
|