Sort group item by attribute
Use a custom IComparer&lt;T&gt; to sort the the items.

class TeamSheetStaffPocoComparer : IComparer&lt;TeamSheetStaffPoco&gt; {

    public int Compare(TeamSheetStaffPoco a, TeamSheetStaffPoco b) {

        if (a.StaffID == null &amp;&amp; b.StaffId == null)
        {
            return a.FreeTextName.CompareTo(b.FreeTextName);
        }

        if (a.StaffID &gt; 0 &amp;&amp; b.StaffID &gt; 0) 
        {
            return a.Name.CompareTo(b.Name);
        }

        return a.StaffID &gt; 0 ? 1 : -1;
    }

 }


Then you can simplify the last two lines to 

var result = resList.OrderBy(x =&gt; x, new TeamSheetStaffPocoComparer()).ToList();


Also, you can now reuse the comparison class elsewhere too if you wish.