using System.Collections.Generic;
public static void Main()
var myArray = new[] { 1, 1, 1, 2, 2, 1, 1, 3, 9, 9, 4, 5, 5, 9, 1, 1 };
IEnumerable<int> myList = myArray.ToList();
IEnumerable<int> result = new List<int>();
var query = myList.GroupBy(x => x)
.Select((y, index) => new { Element = y.Key, Counter = y.Count() });
var firstCounter = query.First().Counter == 1 ? 0 : query.First().Counter;
var lastCounter = query.Last().Counter == 1 ? 0 : query.Last().Counter;
myList = myList.SkipWhile(l => l == query.First().Element);
myList = myList.SkipLastWhile(i => i == query.Last().Element);
Console.WriteLine(string.Join(", ", myList));
public static class Helper
public static IEnumerable<TSource> SkipLastWhile<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
var buffer = new List<TSource>();
foreach (var item in source)
foreach (var bufferedItem in buffer)
yield return bufferedItem;