List<List<Foo>> mainList = ...
// Find count of biggest sub-list.
int maxCount = mainList.Max(list => list.Count);
// Remove all other sub-lists.
mainlist.RemoveAll(list => list.Count != maxCount);
Обратите внимание, что если имеется несколько подсписков с максимальным количеством, все они будут сохранены.
Если вы не хотите этого, вы можете произвольно выбрать один из них для сохранения:
if(mainlist.Count != 1)
mainList.RemoveRange(1, mainList.Count - 1);
Если вам не важна производительность и вы не против переназначения переменной, вы можете сделать следующее:
mainList = mainList.OrderByDescending(list => list.Count)
.Take(1)
.ToList();
EDIT :
В .NET 2.0 вы можете сделать что-то вроде:
public static void KeepBiggestSubList<T>(List<List<T>> mainList)
{
if (mainList == null)
throw new ArgumentNullException("mainList");
if (mainList.Count == 0)
return;
List<T> maxList = mainList[0];
foreach (List<T> list in mainList)
{
if (list.Count > maxList.Count)
maxList = list;
}
mainList.Clear();
mainList.Add(maxList);
}