using System.Collections.Generic;
public string Name { get; set; }
public int? PercentOwned {get; set;}
public bool IsPrimary {get; set; }
public class PercentOwnerPrimaryContactComparer : IComparer<Principal>
public int Compare(Principal x, Principal y)
if (x == null && y == null)
if (x.PercentOwned < y.PercentOwned)
if (x.PercentOwned > y.PercentOwned)
return (!x.IsPrimary && !y.IsPrimary) ? 0 : x.IsPrimary ? 1 : -1;
public static void Main()
var sortedIndividuals = new List<Principal>();
sortedIndividuals.Add(new Principal { Name = "Bob1", PercentOwned = 70, IsPrimary = false });
sortedIndividuals.Add(new Principal { Name = "Bob2", PercentOwned = 60, IsPrimary = false });
sortedIndividuals.Add(new Principal { Name = "Bob3", PercentOwned = 60, IsPrimary = false });
sortedIndividuals.Add(new Principal { Name = "Bob4", PercentOwned = 60, IsPrimary = true });
sortedIndividuals.Add(new Principal { Name = "Bob5", PercentOwned = 50, IsPrimary = false });
sortedIndividuals.Add(new Principal { Name = "Bob6", PercentOwned = 50, IsPrimary = false });
sortedIndividuals.Add(new Principal { Name = "Bob7", PercentOwned = 20, IsPrimary = false });
var sorted = sortedIndividuals
.OrderByDescending(i => i, new PercentOwnerPrimaryContactComparer())
.ThenBy(i => i.Name).ToList();
Console.WriteLine(JsonConvert.SerializeObject(sorted));