【发布时间】:2018-03-25 19:01:02
【问题描述】:
我正在使用这个DataTables ASP.NET 使用带有Web API 的DataTables 服务器端处理。它工作得很好,但我想找到一种更好的方法来处理APIController 方法中的排序。现在我正在使用很多if statements 并明确引用IDataTablesRequest.Column 字段名称,但我必须为每个字段和表执行此操作。我下面的代码在我的APIController 方法中,由datatables 使用ajax get 调用。代码中的request 对象是来自DataTables ASP.NET 的IDataTablesRequest 请求。排序列在此发送。
我研究过在 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);
}
【问题讨论】:
标签: c# asp.net linq asp.net-web-api datatables