Suppose this is my member class
class Member { public string CategoryId { get; set; } public string MemberName { get; set; } public int Distance { g
This also works, if you do not require items ordered by (little modified Kjartan's answer)
var grouped = list.GroupBy(item => item.CategoryId).ToList(); var shortest = grouped.Select(grp => grp.OrderBy(item => item.Distance).First());