说我有一个像这样的对象列表
list <type>
---------------
o1: date-23.03
o2: date-23.03
o3: date-24.05
o4: date-25.05
如何创建包含具有相同日期的对象的内部列表的另一个列表?例如:
new list<list<type>>
-----------------------
List<type> innerList1 {o1, o2}
List<type> innerList2 {o3}
List<type> innerList3 {o4}
可能的LINQ解决方案很酷,但算法也不错。
答案 0 :(得分:8)
请勿使用List<object>
,而应使用List<RealClass>
假设它实际上是一个已知类型并且它是DateTime
属性:
List<List<ClassName>> objectsbyDate = listOfObjects
.GroupBy(x => x.DateTimeProperty.Date)
.Select(g => g.ToList())
.ToList();
如果它实际上是string
属性,那为什么会这样呢?你应该解决这个问题。但是,如果您坚持string
,仍然可以使用Enumerable.GroupBy
。但是如果两个物体有不同的年份呢?由于未存储年份,您甚至不会提及它。
如果要显示它,请在最后一步将DateTime
转换为字符串。
答案 1 :(得分:1)
按日期对象分组:
List<object> list = new List<object> {o1,o2,o3,o4};
var result = list.GroupBy(g => g);
foreach(var group in result) {
Console.WriteLine(group.Key);
}