关于c#:动态创建OrderBy参数

Creating OrderBy parameter dynamically

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Dynamic LINQ OrderBy

你好,我有一个数据类的IEnumerable。我要根据用户选择对该集合进行排序。如何编写一个将字段名排序的通用函数&will return something line IEnumerable.OrderBy(f => f.fieldName)


看看这里:动态LINQ(第1部分:使用LINQ动态查询库)


你可以很容易地做到这一点。假设我们有一个名为Item的对象(类),它是:

1
2
3
4
5
6
public class Item
{
    public string Name { get; set; }
    public string Description { get; set; }
    public string Name2 { get; set; }
}

这是一个数据收集的例子

1
2
3
4
5
var items = new List<Item>
                {
                    new Item {Name ="Test 1", Description ="Description 1"},
                    new Item {Name ="Test 2", Description ="Description 2"}
                };

使用switch条件,如

1
2
3
4
5
6
7
8
9
10
11
12
13
IOrderedEnumerable<Item> orderedItems;
switch (selection)
{
    case 1:
        orderedItems = items.OrderBy(i => i.Name);
        break;
    case 2:
        orderedItems = items.OrderBy(i => i.Description);
        break;
    default:
        orderedItems = items.OrderBy(i => i.Name2);
        break;
}