按日期对数组项目进行分组

时间:2015-04-20 09:10:25

标签: c# linq list generics group-by

说我有一个像这样的对象列表

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

2 个答案:

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