List.OrderBy定义变量中的顺序

时间:2017-07-20 09:06:16

标签: c# list

我有一个包含对象的列表:

class MyType
{
    String Name;
    String Address;
    DateTime BirthDay;
}

List<MyType> myList;

我想写一个像这样工作的函数:

public void SortList(int value)
{
    // orderValue => this is the variable I need
    if (value == 0)
        orderValue = MyType.Name; // Sort list by Name
    else if (value == 1)
        orderValue = MyType.Address; // Sort list by Address
    else if (value == 1)
        orderValue = MyType.BirthDay; // Sort list by BirthDay

    if (orderValue != null)
    {
        List<MyType> sortedList = myList.OrderBy(orderValue).ToList();
        if (Enumerable.SequenceEqual(myList, sortedList))
            sortedList = myList.OrderByDescending(orderValue).ToList();
        myList = sortedList;
    }
}

如何编写orderValue以使此代码正常工作?

这只是我的代码的综合,如果需要,我可以提供更多详细信息。

3 个答案:

答案 0 :(得分:4)

OrderBy可以接受Func,你可以拥有像这样的变量

Func<Person, string> orderFunc = x => x.Name;

if (value == 0)
   orderFunc = x => x.Name;
else if (value == 1)
   orderFunc = x => x.Address;

myList = myList.OrderBy(orderFunc).ToList();

答案 1 :(得分:1)

你有几种方法可以做到这一点。例如,您可以在条件语句中添加OrderBy子句,如下所示:

IEnumerable<MyType> data = myList;
if (value == 0)
    data = data.OrderBy(x => x.Name); // Sort list by Name
else if (value == 1)
    data = data.OrderBy(x => x.Address); // Sort list by Address
res = data.ToList();

您也可以在一个声明中执行此操作:

res = myList
    .OrderBy(x => value == 0 ? x.Name : "")
    .ThenBy(x => value == 1 ? x.Address : "")
    .ToList();

这有点难以阅读,但它将在EF或LINQ to SQL中的RDBMS端完成工作。

答案 2 :(得分:0)

你可以尝试

myList.OrderBy((x) => (value == 0 ? x.Name : x.Address));