使用布尔值的多个orderby linq查询

时间:2014-08-26 16:42:20

标签: c# linq sql-order-by tuples

假设我有一个CustomObjects列表,这样

List<CustomObject> list = new List<CustomObject>();
public class CustomObject
{
    public int page {get;set;}
    public bool configured {get;set;}
    public bool searchable {get;set;}
    <more bool properties>
}

我希望能够按这些布尔值排序或过滤。但并非所有属性都是必需的。所以,有些是可空的。我想构建一个简单地将OrderBy()和ThenBy()链接在一起的动态查询 我想也许我应该创建一个元组来帮助。

List<Tuple<string, bool>> expressionTuple = new List<Tuple<string, bool>>();
// so now I have a list of tuples.
// so based on whether or not my method parameters are null or not I populate the list
if(ShouldFilter(methodParameter))
{
   expressionTuple.Add(new Tuple<string, bool>("ColumnName", methodParameter)));
}

所以我正在考虑某种类似的自定义排序函数:

private IEnumerable<T> CustomSort<T>(IEnumerable<T> data, List<Tuple<string, bool>> sortExpression)
{ 
     for(int i = 0; i < sortExpression.Count; i++)
     {
         int index = i; // see if this is the first iteration
         // build an expression that would be similar to:
         if(index==0)
         {
             data = list.OrderBy(x=>x.ColumnName == booleanValue);
         }else
         {
             data = list.ThenBy(x=>x.ColumnNam == booleanValue);
         }
      }
  }

我不知道如何做到这一点。也许还有一种更简单的方法吗?

1 个答案:

答案 0 :(得分:0)

为什么呢?如果你在不同的地方使用不同的排序,只需将LINQ表达式放在这些不同的地方? 在我看来,就像你一样,试图让那些并不那么复杂的东西复杂化。

data.OrderBy(p => p.Page)
    .ThenBy(p => p.Configured)
    .ThenBy(...);