按多个字段对集合进行排序
我需要对一个集合进行排序。 例如,我有
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
然后,如果您想按第一个日期排序,那么您可以执行以下操作:
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);
我希望这有帮助。
上述就是C#学习教程:按多个字段对集合进行排序分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/997184.html