Действительно ли таблица упорядочена осмысленно?
Я думаю, чтобы сделать это аккуратно, вам нужен оператор группировки, который работает не так, как GroupBy
, что-то вроде GroupConsecutive
, поэтому все отдельные группы хранятся отдельно, а не объединяются, если у них одинаковый ключ.
К сожалению, мой VB ржавый или вообще не существует, но вы можете мысленно преобразовать это:
public static class X
{
private class Grouping<K, V> : List<V>
{
public K Key { get; set; }
}
public static IEnumerable<IGrouping<TKey, TValue>> GroupConsecutive(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector)
{
Grouping current = null;
foreach (var elem in source)
{
var key = keySelector(elem);
if (current == null || !current.Key.Equals(key))
{
if (current != null)
yield return current;
current = new Grouping { Key = key };
}
current.Add(elem);
}
if (current != null)
yield return current;
}
}
Теперь вы можете сказать:
table.GroupConsecutive(r => r.Value).Where(g => g.Key == null).Max(g => g.Count);
Здесь таблица обрабатывается как IEnumerable
, так что все это происходит в памяти.
Возможно, вам лучше сделать это в сыром SQL, если это так.