Вы не можете удалять элементы из IGrouping<TKey, TValue>
. Это неизменяемая структура данных.
Чтобы исключить последний элемент из нечетных подсчитанных групп, вы можете написать
var groupedItems = from item in items
group item by item.ID into byID
let odd = byID.Count() % 2 == 0
select odd ? byID.SkipLast(1) : byID;
Если вы wi sh, чтобы сохранить ключи, вы можете спроецировать результаты иначе
var groupedItems = from item in items
group item by item.ID into byID
let odd = byID.Count() % 2 == 0
select (id: byID.Key, values: odd ? byID.SkipLast(1) : byID);
И перебирать их так
foreach (var (id, values) in groupedItems) {
Console.WriteLine($"{id}: {values.ToArray()}");
}