按日期分组数组项

3

假设我有如下对象列表:

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解决方案会很酷,但算法也不错。

1
不要使用 List<object>,而是使用 List<RealClass> - Tim Schmelter
2个回答

8
不要使用 List<object>,而是使用 List<RealClass>
假设它实际上是已知类型,并且它是一个DateTime属性:
List<List<ClassName>> objectsbyDate = listOfObjects
    .GroupBy(x => x.DateTimeProperty.Date)
    .Select(g => g.ToList())
    .ToList();

如果代码中注释说实际上是“字符串”属性,那为什么会这样呢?你应该修复这个问题。然而,如果您坚持使用“字符串”,您仍然可以使用Enumerable.GroupBy。但是如果两个对象有不同的年份怎么办?你甚至都不会提到,因为年份没有存储。
相反,如果您想要显示日期,请在最后一步将DateTime转换为字符串。

1
@V.G.:一个表示“DateTime”的字符串,为什么是这样的?然而,它只包含月份和日期,那如果它包含不同的年份呢?你总是想把它们视为“DateTime.Today.Year”吗? - Tim Schmelter

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);
}

使用list.GroupBy(g => g.ToList()).ToList(),可以获取List<List<object>>列表。 - Andrei Tătar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接