例如,我想尝试这样的事情。排序参数可能不包含任何顺序,也可能有一个或多个排序列。但我不能使用ThenBy
方法,因为它只能在OrderBy
之后才可用。下面的代码将继续重置排序列表中最后一项的顺序。我不想改变方法签名。帮助将不胜感激,谢谢。有没有办法通过IQueryable订购不同数量的订单
public IQueryable<Person> FilterList(string forename, List<Sorting> sorting)
{
IQueryable<Person> query = dc.Set<Person>();
if(!string.IsNullOrEmpty(forename)){
query = query.Where(w=>w.Forename.Contains(forename));
foreach(var sort in sorting)
{
switch(sort.By)
{
case "asc":
switch(sort.Sort)
{
case "forename":
query = query.OrderBy(o=>o.Forename);
break;
case "surname":
query = query.OrderBy(o=>o.Surname);
break;
}
break;
case "desc":
switch(sort.Sort)
{
case "forename":
query = query.OrderByDescending(o=>o.Forename);
break;
case "surname":
query = query.OrderByDescending(o=>o.Surname);
break;
}
break;
}
}
return query;
}
public class Sorting
{
public string Sort{get;set;}
public string By{get;set;}
}
这是一件好事,看看这个:http://stackoverflow.com/questions/41244/dynamic-linq-orderby-on-ienumerablet当你想动态订购(即使它不会直接解决你的问题) –
你也可以看看:[按匿名类型字段排序](http://stackoverflow.com/questions/22429156/order-by-字段在一个匿名类型) – nlips