如何使用LINQ对列表进行分组(例如:List <List >)

我知道我可以通过一些for循环轻松地做到这一点,但是想看看是否有办法用流畅的LINQ来做到这一点。 我试图找出每个子列表中有多少个。

我正在查看Enumerable.SequenceEqual但无法使用GroupBy()

假设我有一个List<List如下所示:

 { {1,2} {2, 3, 4} {1,2} {1,3} {1,2} } 

我希望用相同的列表对它进行分组,就像这样

 {   <1, {1,3} } 

您需要实现IEqualityComparer> ,然后可以将其传递给GroupBy 。 例如:

 public class ListEqualityComparer : IEqualityComparer> { public bool Equals(List lhs, List rhs) { return lhs.SequenceEqual(rhs); } public int GetHashCode(List list) { unchecked { int hash = 23; foreach (T item in list) { hash = (hash * 31) + (item == null ? 0 : item.GetHashCode()); } return hash; } } } 

然后:

 var counts = lists.GroupBy(x => x, (key, lists) => new { List = key, Count = lists.Count() }, new ListEqualityComparer());