이 DataTables ASP.NET을 사용하는 웹 API에서 DataTables Serverside 처리를 사용하고 있습니다. 그것은 좋은 일하지만 난 APIController
메서드에서 정렬을 처리하는 더 나은 방법을 찾고 싶어요. 지금은 if statements
을 많이 사용하고 IDataTablesRequest.Column
필드 이름을 명시 적으로 참조하고 있지만 모든 필드와 테이블에 대해이 작업을 수행해야합니다. 내 코드는 아래 내 APIController
메서드는 datatables
ajax get을 사용하여 호출됩니다. 코드의 request
개체는 DataTables ASP.NET의 IDataTablesRequest
요청입니다. 정렬 열이 여기에 전송됩니다.ASP.NET 열 정렬 용 DataTables
SortBy<>
에서 IEnumerable
확장 방법을 사용해 보았지만 this question에서 작동하지 않았습니다.
이것은 지금 정렬하는 데 사용하는 코드입니다. 명시 적으로 필드 이름을 사용할 필요가 없기 때문에 필드를 정렬하여 정렬 할 수있는 더 나은 방법이 있습니까?
var orderColums = request.Columns.Where(x => x.Sort != null);
var filteredData = deviceList.Where(_item => _item.UserName.Contains(request.Search.Value));
IColumn sortColumn = orderColums.FirstOrDefault();
var dataPage = new object();
if (sortColumn != null && sortColumn.Field == "dateCreated")
{
if (sortColumn.Sort.Direction == DataTables.AspNet.Core.SortDirection.Ascending)
{
dataPage = filteredData.OrderBy(o => o.DateCreated).Skip(request.Start).Take(request.Length);
}
else
{
dataPage = filteredData.OrderByDescending(o => o.DateCreated).Skip(request.Start).Take(request.Length);
}
}
else if (sortColumn != null && sortColumn.Field == "userName")
{
if (sortColumn.Sort.Direction == DataTables.AspNet.Core.SortDirection.Ascending)
{
dataPage = filteredData.OrderBy(o => o.UserName).Skip(request.Start).Take(request.Length);
}
else
{
dataPage = filteredData.OrderByDescending(o => o.UserName).Skip(request.Start).Take(request.Length);
}
}
else
{
dataPage = filteredData.Skip(request.Start).Take(request.Length);
}