我有一个包含对象的列表:
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
以使此代码正常工作?
这只是我的代码的综合,如果需要,我可以提供更多详细信息。
答案 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));