按多个字段对集合进行排序
本文关键字:排序 集合 字段 | 更新日期: 2023-09-27 18:30:27
我需要对集合进行排序。例如,我有
Austin 12/3/2012
Sam 100 12/3/2012
Sam 200 14/3/2012
Bubly 300 12/3/2012
Bubly 300 15/3/2012
ram 100 13/3/2012
现在,如果排序顺序是名称,则日期时间那么输出应该是
Austin 12/3/2012
Bubly 12/3/2012
Bubly 15/3/2012
ram 13/3/2012
sam 12/3/2012
sam 14/3/2012
如果他的排序顺序是日期时间,则名称它应该是
12/3/2012 austin
12/3/2012 bubly
12/3/2012 sam
13/3/2012 ram
14/3/2012 sam
15/3/2012 bubly
因此,对于其他项目。我该怎么做?如何采用列的顺序进行排序。
在使用
OrderBy 执行进一步排序后,可以使用 Linq 函数 ThenBy 执行进一步排序。
listOfRecords.OrderBy(p => p.Name).ThenBy(p => p.Date)
像这样:
yourList.OrderBy(o => o.DateTime).ThenBy(o => o.Number);
首先,创建两个函数:
var SortByDate=(p=>p.Date);
var SortByName=(p=>p.Name);
然后,例如,您有一个包含两个的列表
var SortDimensions=new List<object>({SortByDate,SortByName});
然后,如果您想按第一个日期排序,请命名:
myList.OrderBy(SortDimensions[0]).ThenBy(SortDimensions[1]);
现在,这是棘手的部分,如果您想先按名称排序,那么日期您只需更改 SortDimensionsList 中函数的顺序:
SortDimensions.Remove(SortByName);
SortDimensions.Insert(0,SortByName);
这样,相同的 OrderBy 语句将给你一个不同的结果。
诚然,这非常接近伪代码,因为您可能必须对 SortDimensions 集合使用除List<object>
以外的其他内容以避免编译器错误,但我目前无法访问 IDE,但答案的精神保持不变。创建一个集合,在其中存储委托函数,然后更改集合中的顺序,以使用相同的泛型代码实现不同的排序维度。
我会创建一个类来保存您的信息
public class NameDate
{
private string name;
private DateTime date;
public string Name
{
get { return name; }
set { name = value; }
}
public DateTime Date
{
get { return date; }
set { date = value; }
}
}
然后我会填充一个List<NameDate>
来保存您的物品。完成此操作后,若要对项目进行排序,可以使用 LINQ
List<NameDate> someList = new List<NameDate>();
someList = GetNameDateList();
var orderedByNameList = someList.OrderBy(e => e.Name);
var orderedByDateTimeList = someList.OrderBy(e => e.Date);
我希望这有所帮助。