Это может дать вам все пробелы в вашей таблице
var nums= (new List<int> (){1,2,3,25,4,5,6,7,8, 12, 15,21,22,23}).AsQueryable();
nums
.OrderBy(x => x)
.GroupJoin(nums, n=> n + 1, ni => ni, (o,i)=> new {o, i})
.Where(t=> !(t.i is IGrouping<int, int>))
.Dump();
Из Можно ли использовать LINQ для поиска пропусков в отсортированном списке? :
var strings = new string[] { "7", "13", "8", "12", "10", "11", "14" };
var list = strings.OrderBy(s => int.Parse(s));
var result = Enumerable.Range(list.Min(), list.Count).Except(list).First(); // 9
По сути, упорядочить список. Затем создайте массив последовательных чисел (1,2,3...
) от минимума до максимума. Проверьте пропущенные значения в списке и возьмите первое. Это первое пропущенное число.