Как я могу заказать этот простой список .NET по двум свойствам?

1

Учитывая список Location, мне нужно сделать 2 порядка.

  1. Сортировать по LocationType возрастанию.
  2. Для каждого порядка значений типа местоположения они отображаются по Name возрастанию.

Пример данных:

Location Type | Name
            2 | Templestowe Lower
            2 | Templestowe
            1 | Melbourne

Ожидаемые результаты:

1. Melbourne
2. Templestowe
3. Templestowe Lower

Вот (не работает).NET Fiddle...

и вот главный код (скопированный с этой скрипки)..

private class Location
{
    public Location (string name, int locationType)
    {
        Name = name;
        LocationType = locationType;
    }

    public string Name { get; private set; }
    public int LocationType { get; private set;}
}

public static void Main()
{

    var locations = new List<Location> 
    {
        new Location("Templestowe Lower", 2),
        new Location("Templestowe", 2),
        new Location("Melbourne", 1)
    };

    // TODO: return a list, sorted by LocationType and name.
    var results = XXXXX;

    foreach(var location in results)
    {
        Console.WriteLine(location.Name);
    }
}
Теги:
linq
partitioning
sql-order-by

2 ответа

6
Лучший ответ
locations.Sort((x,y) => {
   int delta = x.LocationType.CompareTo(y.LocationType);
   if(delta == 0) delta = string.Compare(x.Name, y.Name);
   return delta;
});

В качестве альтернативы:

var results = locations.OrderBy(x => x.LocationType).ThenBy(x => x.Name);

Или в синтаксисе LINQ (компилируется одно и то же):

var results = from loc in locations
              orderby loc.LocationType, loc.Name
              select loc;
  • 0
    Я думаю, что он имел в виду сначала порядок расположения, затем имя. редактировать: я вижу, вы поняли :)
  • 0
    @ действительно; исправлял это; p
Показать ещё 5 комментариев
-2

Проверьте это, используя

var results = locations
            .GroupBy(x => x.LocationType)
            .OrderBy(x => x.Key)
            .SelectMany(g => g.OrderBy(x=>x.Name)); 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню