VB.NET 3.5环境下如何按LastDate属性对lstDocumentChildren对象列表排序
解决方案:VB.NET + .NET 3.5 按对象日期属性排序列表
针对你在VS2008 + .NET 3.5环境下,需要对lstDocumentChildren列表按LastDate日期属性排序的需求,可参考以下两种实现方案:
方案1:使用List自带Sort方法(兼容性最优)
直接调用List(Of T)的内置Sort方法,传入Lambda比较委托即可实现排序,无需额外引入命名空间:
' 放在你标注的排序位置 ' 以下为升序排序,如需降序,将x和y的位置互换即可:y.LastDate.CompareTo(x.LastDate) lstDocumentChildren.Sort(Function(x, y) x.LastDate.CompareTo(y.LastDate))
如果你的环境特殊不支持Lambda表达式,可以自定义比较器实现:
' 先定义比较器类,替换代码中的「文档明细类」为你mobjDocumentsDetail的实际类型 Public Class DocumentDetailComparer Implements IComparer(Of 文档明细类) Public Function Compare(x As 文档明细类, y As 文档明细类) As Integer Implements IComparer(Of 文档明细类).Compare Return x.LastDate.CompareTo(y.LastDate) End Function End Class ' 排序时调用 lstDocumentChildren.Sort(New DocumentDetailComparer())
方案2:使用LINQ排序(代码更简洁)
.NET 3.5已支持LINQ操作,引入System.Linq命名空间后,可直接调用排序方法生成新的有序列表:
' 升序排序 lstDocumentChildren = lstDocumentChildren.OrderBy(Function(item) item.LastDate).ToList() ' 如需降序,替换为:lstDocumentChildren = lstDocumentChildren.OrderByDescending(Function(item) item.LastDate).ToList()
重要提醒
你当前的代码逻辑是先填充lstDocumentChildren、再填充ListView控件,仅对列表排序不会同步更新已渲染的ListView内容顺序,建议调整逻辑顺序:
- 先遍历所有子项,将全部
mobjDocumentsDetail添加到lstDocumentChildren中 - 执行上述排序操作
- 遍历排序后的
lstDocumentChildren,筛选符合状态的项填充ListView、更新计数
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

