We can sort results which returns from a WebAPI Get method using Linq Dynamics as follows.
First of all we need to create an extension method for IQueryable<T>. This method would perform required sorting. Following is the code.
We have hard coded the separator and treat the - sign as the descending sorter. source.OrderBy is using the linq dynamics OrderBy method.
Application of the sorting can be done as follows.
The VehicleProvider.GetByClient method should return an IQueryable<T>. All we need to do is plug the ApplySort method with sort parameters to the result.
First of all we need to create an extension method for IQueryable<T>. This method would perform required sorting. Following is the code.
public static class IQueryableExtensions
{
public static IQueryable<T> ApplySort<T>(this IQueryable<T> source, string sort)
{
if (source == null)
{
throw new ArgumentNullException("source");
}
if (sort == null)
{
return source;
}
var lstSort = sort.Split(',');
string completeSortExpression = "";
foreach (var sortOption in lstSort)
{
if (sortOption.StartsWith("-"))
{
completeSortExpression = completeSortExpression + sortOption.Remove(0, 1) + " descending,";
}
else
{
completeSortExpression = completeSortExpression + sortOption + ",";
}
}
if (!string.IsNullOrWhiteSpace(completeSortExpression))
{
source = source.OrderBy(completeSortExpression.Remove(completeSortExpression.Count() - 1));
}
return source;
}
}
We have hard coded the separator and treat the - sign as the descending sorter. source.OrderBy is using the linq dynamics OrderBy method.
Application of the sorting can be done as follows.
[HttpGet, Route("ByClient/{clientID:int}")]
public IHttpActionResult GetByClient(int clientID,string sort="id")
{
try
{
var receivedModel = VehicleProvider.GetByClient(clientID);
IHttpActionResult response = Ok(receivedModel.ApplySort(sort));
return response;
}
catch (Exception)
{
return InternalServerError();
}
}
The VehicleProvider.GetByClient method should return an IQueryable<T>. All we need to do is plug the ApplySort method with sort parameters to the result.
No comments:
Post a Comment