按多个字段对集合进行排序

我需要对一个集合进行排序。 例如,我有

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 

现在如果排序顺序是Name,则datetime然后输出

 Austin 12/3/2012 Bubly 12/3/2012 Bubly 15/3/2012 ram 13/3/2012 sam 12/3/2012 sam 14/3/2012 

如果他排序顺序是Datetime,那么它应该是

 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); 

然后你有一个包含这两个的List

 var SortDimensions=new List({SortByDate,SortByName}); 

然后,如果您想按第一个日期排序,那么您可以执行以下操作:

 myList.OrderBy(SortDimensions[0]).ThenBy(SortDimensions[1]); 

现在,这里是棘手的部分,如果你想首先按名称排序,那么你只需改变SortDimensionsList中函数的顺序:

 SortDimensions.Remove(SortByName); SortDimensions.Insert(0,SortByName); 

这样,相同的OrderBy语句将为您提供不同的结果。

PS。 不可否认,这非常接近于伪代码,因为您可能必须使用除List之外的其他东西来避免编译器错误,但是我现在无法访问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来保存您的项目。 完成后,要对项目进行排序,您可以使用LINQ

 List someList = new List(); someList = GetNameDateList(); var orderedByNameList = someList.OrderBy(e => e.Name); var orderedByDateTimeList = someList.OrderBy(e => e.Date); 

我希望这有帮助。