I'm trying to sort my data set like this:
public async Task<ICollection<Article>> SortArticles(string sortOrder)
{
IQueryable<Article> articles = GetAll();
switch (sortOrder)
{
case "name_desc":
articles.OrderByDescending(s => s.Name).AsQueryable();
break;
case "date":
articles = articles.OrderBy(s => s.DateCreated).AsQueryable();
case "date_desc":
articles = articles.OrderByDescending(s => s.DateCreated).AsQueryable();
break;
default:
articles.OrderBy(s => s.Name).AsQueryable();
break;
}
var result = await articles.ToListAsync();
return result;
}
However, my result is always the ordered same way.
What I'm doing wrong?
Added the missing break and you are also missing the assignment of the sort.
public async Task<ICollection<Article>> SortArticles(string sortOrder)
{
IQueryable<Article> articles = GetAll();
switch (sortOrder)
{
case "name_desc":
articles = articles.OrderByDescending(s => s.Name).AsQueryable();
break;
case "date":
articles = articles.OrderBy(s => s.DateCreated).AsQueryable();
break;
case "date_desc":
articles = articles.OrderByDescending(s => s.DateCreated).AsQueryable();
break;
default:
articles = articles.OrderBy(s => s.Name).AsQueryable();
break;
}
var result = await articles.ToListAsync();
return result;
}
You can create an extension method for the dynamic sorting of the result set. You need to use property parameters as sorting column in database.
You can modify the
this IEnumerable<<TT>> source
to
this IQueryable<<TT>> source
if required or causing an error.
public static IEnumerable<T> Sort<T>(this IEnumerable<T> source, bool isDescending, string property)
{
if (isDescending)
{
return source.OrderByDescending(x => x.GetReflectedPropertyValue(property));
}
else
{
return source.OrderBy(x => x.GetReflectedPropertyValue(property));
}
}
private static object GetReflectedPropertyValue(this object subject, string property)
{
return subject.GetType().GetProperty(property).GetValue(subject, null);
}
I can identify some fixes for your code.
break
with all cases.articles =
)for every case
.AsQueryable
from each case.Enum Example
public enum Operator
{
PLUS, MINUS, MULTIPLY, DIVIDE
}
switch(op)
{
case Operator.PLUS:
{
}
...
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.