using System; using System.Linq; public class Test { public static void Main() { var products = new [] { new { Name="A", Priority="1", Value=default(string) }, new { Name="A", Priority="2", Value=default(string) }, new { Name="A", Priority="3", Value="10" }, new { Name="A", Priority="4", Value=default(string) }, new { Name="A", Priority="5", Value="20" }, new { Name="A", Priority="6", Value=default(string) }, new { Name="B", Priority="1", Value="15" }, new { Name="B", Priority="2", Value=default(string) }, new { Name="B", Priority="3", Value="10" }, new { Name="B", Priority="4", Value=default(string) }, new { Name="B", Priority="5", Value="20" }, new { Name="B", Priority="6", Value=default(string) }, }; var result = products .GroupBy(p => p.Name) .SelectMany (grp => grp.OrderBy(p => p.Priority) // sort by priority .SkipWhile(p => p.Value == null) // skip null entries at beginnig .Reverse() // reverse .SkipWhile(p => p.Value == null) // skip null entries at end .Reverse() // reverse back to normal .Where(p => p.Value == null) // then find null entries ); foreach (var product in result) { Console.WriteLine("Product(Name=" + product.Name + ",Priority=" + product.Priority + ",Value=" + product.Value + ")"); } } }