Ordenando el origen de datos de Datagridview en la Lista <T> donde T es anónimo

Una pregunta relativamente simple. Tengo una vista de cuadrícula de datos, que todo lo que hace es mostrar estadísticas. No hay edición / adición / eliminación de filas. La vista de cuadrícula de datos está vinculada a una Lista. Todo lo que quiero lograr es que el usuario pueda ordenar las columnas.

class Market
{
    public int Location {get;set;}
    public float Value {get;set;}
    //...
}
class City
{
    public String Name {get;set;}
    //...
}

List<Market> _markets;
List<City> _cities;
//Lists are populated.

dataGridView1.DataSource = _markets.Select(market => 
    new { _cities[market.Location].Name, market.Value}).ToList();

Como se esperaba, las columnas no se pueden ordenar, pero la información que se muestra es lo que se desea. Mi pregunta es cómo hacer que el DataGridView se ordene en función del tipo de columna con la cantidad de código menos complicada y mínima, ya que el código se usará varias veces en todo momento.

Esta aplicación solía usar un DataBase que tenía vistas. Estas vistas luego poblaron DataGridViews. Las vistas aún están disponibles, por lo que una posible solución podría ser:

DataBase.ViewMarketValue temp = new DataBase.ViewMarketValue()

_markets.ForEach(market => temp.AddViewMarketValueRow(_cities[market.Location].Name, market.Value);
dataGridView1.DataSource = temp;

Esto da como resultado lo deseado: una vista de cuadrícula de datos que tiene toda la información y se puede ordenar. El único problema es que parece incorrecto utilizar vistas en este aspecto. ¿Entonces qué debo hacer?

Respuestas a la pregunta(2)

Su respuesta a la pregunta