如何通过嵌套List对具有List <string>属性的List <t>进行分组?</string> </t>

时间:2012-07-09 15:32:46

标签: c# linq group-by

我的自定义数据类型包含List<string>

我希望通过嵌套ListCustomDataType List<string>进行分组。

我试过以下

 compoundSchedules.GroupBy(a => a.Timepoints);

其中Timepoints是表示为字符串的日期列表。如果任何CustomDataType具有相同的时间点,我希望它们组合在一起。 使用上面的代码,它不会对它们进行分组,而只是重复List CustomDataType的{​​{1}}及其时间点列表IGrouping Key

感谢。

4 个答案:

答案 0 :(得分:2)

有两件事情浮现在脑海中。首先是创建一个Timepoints类并实现IComparable。然后,您可以比较每个列表的每个元素,看它们是否相同。或者,您可以在复合计划上创建一个包含列表哈希码的新属性。

答案 1 :(得分:2)

您应该创建一个IEqualityComparer<List<string>>来检查列表是否具有相同的长度和内容,并使用Enumerable.GroupBy的重载:

compoundSchedules.GroupBy(a => a.Timepoints, myComparer);

要么是这样,要么创建自己的类作为时间点列表,并让它实现GetHashCodeEquals(和/或实现IEquatable<T>),它们由default comparer

答案 2 :(得分:1)

由于TimepointsList<string> - 我会构造一个聚合字符串和组。您可以使用Aggregate方法

来完成此操作
compoundSchedules.GroupBy(a => a.Timepoints.Aggregate( (x,y) => x + y));

答案 3 :(得分:0)

您可以按联合字符串列表进行分组:

var grouped = compoundSchedules.GroupBy(cs => string.Join("", cs.Timepoints));

这也会处理相同的顺序(如果需要)。