Q:

Efficient way to move list items at the end of the list according to specific criteria

Having a List<Office> where Office is a class, I have to sort its entries by country (where country is a property of class Office).
Some offices have no country set and therefore will be displayed at the top of the list. In this case I have to put them at the bottom of the list since considered "less relevant". 
switch (sortOptions.SortField)

...  

case OfficeSortField.Country:

var noCountryList = officesList.Where(a => string.IsNullOrEmpty(a.CountryText)).ToList();
officesList.RemoveAll(a => string.IsNullOrEmpty(a.CountryText));

officesList= sortOptions.SortOrder == SortOrder.Ascending
                                      ? officesList.OrderBy(o => o.CountryText).ToList()
                                      : officesList.OrderByDescending(o => o.CountryText).ToList();

officesList.AddRange(noCountryAssoList);
break;

Under perfomance perspective, is there a better way to proceed? 

A:

The best way for this is to implement a comparer:
class OfficeComparer:IComparer<Office>
{
        int IComparer.Compare(Office a, Office b)
        {
               if ( a.Office.Country != null && b.Office.Country != null) 
                       return a.Office.Country.CompareTo(b.Office.Country);
               if ( a.Office.Country == null && b.Office.Country != null) return -1;
               if ( a.Office.Country != null && b.Office.Country == null) return 1;  
               return 0; // if both have no country, return equal or whatever other criteria comparaison

        }
}

in your comparer, you just give a low priority to office without a country, and then just call the sort method:
List<Office> lst = FillList();

lst.sort(new OfficeComparer());

