3

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

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  

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

12/3/2012 austin
12/3/2012 bubly
12/3/2012 sam
13/3/2012 ram
14/3/2012 sam
15/3/2012 bubly 

因此对于其他项目。我该怎么做呢 ?如何按列的顺序进行排序。

4

4 回答 4

6

使用OrderBy后可以使用 Linq 函数ThenBy进行进一步排序。

listOfRecords.OrderBy(p => p.Name).ThenBy(p => p.Date)
于 2013-09-06T07:45:52.127 回答
4

首先创建两个函数:

var SortByDate=(p=>p.Date);
var SortByName=(p=>p.Name);

然后,例如,您有一个 List 包含两个

var 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>SortDimensions 集合以外的其他东西以避免编译器错误,但我目前无法访问 IDE,但答案的精神保持不变. 创建一个集合,在其中存储委托函数,然后更改集合中的顺序以使用相同的通用代码实现不同的排序维度。

于 2013-09-06T08:35:34.397 回答
4

像这样的东西:

yourList.OrderBy(o => o.DateTime).ThenBy(o => o.Number);
于 2013-09-06T07:45:55.590 回答
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; }
    }
}

然后我会填充 aList<NameDate>来保存你的物品。完成后,您可以使用 LINQ 对项目进行排序

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

我希望这有帮助。

于 2013-09-06T07:49:00.710 回答