我需要对一个集合进行排序。 例如,我有
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
相应的其他项目。我该怎么做呢 ?如何按列的顺序进行排序。
答案 0 :(得分:6)
答案 1 :(得分:4)
首先创建两个函数:
var SortByDate=(p=>p.Date);
var SortByName=(p=>p.Name);
然后你有一个包含两个
的Listvar SortDimensions=new List<object>({SortByDate,SortByName});
然后,如果您想按第一个日期排序,那么您可以这样命名:
myList.OrderBy(SortDimensions[0]).ThenBy(SortDimensions[1]);
现在,这里是一个棘手的部分,如果你想先按名称排序,那么你只需要更改SortDimensionsList中函数的顺序:
SortDimensions.Remove(SortByName);
SortDimensions.Insert(0,SortByName);
这样,相同的OrderBy语句会给你一个不同的结果。
PS。不可否认,这非常接近伪代码,因为您可能必须使用除List<object>
以外的其他东西来排序编译器错误,但我现在无法访问IDE,但是精神答案仍然是一样的。创建一个集合,在其中存储委托函数,然后更改集合中的顺序,以使用相同的通用代码实现不同的排序维度。
答案 2 :(得分:0)
我会创建一个类来保存您的信息
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);
我希望这会有所帮助。