具有动态Order By的LINQ查询 - 多个字段

时间:2013-09-24 06:38:14

标签: c# linq sorting

我有一个名称,日期,类别作为参数的集合。我想根据动态变化的三个输入顺序对列表进行排序。 例如:在一种情况下,我必须分别对订单日期,名称,类别进行排序。 在另一种情况下,订单是名称,日期和类别。所以我可以拥有所有的排列和组合。有人可以用通用的方式帮助我实现它。

3 个答案:

答案 0 :(得分:1)

LINQ已经允许您通过在OrderBy之后添加Queryable.ThenByQueryableThenByDescendingEnumerable.ThenByEnumerable.ThenByDescending函数来使用多个字段进行排序。

检查Multiple “order by” in LINQ是否有类似的问题和讨论。

顺便说一下,如果你需要一个Enumerable没有提供的罕见方法,你可以将Enumerable转换成一个只调用AsQueryable的Queryable。

答案 1 :(得分:0)

我也在这里找到了他可能喜欢的东西:http://www.codeproject.com/Articles/27834/Generic-List-Sort-Function< - 希望它有所帮助,它可以通过任何输入属性进行排序。该物业通过反思获得。

答案 2 :(得分:0)

这是一个例子

// Just to get IOrderedEnumerable from the collection
// And set the default order
var orderedItems = context.Items.OrderBy(i => i.Name);

var orderByString = txtOrderBy.Text.ToLower();
switch(orderByString)
{
    case "category":
        orderedItems = orderedItems.OrderBy(i => i.Category);
        break;
    case "date":
        orderedItems = orderedItems.OrderBy(i => i.Date);
        break;
    default:
        break;
}