c# - 如何按两个属性对这个简单的 .NET 列表进行排序?

标签 c# .net linq sql-order-by partitioning

给定位置的列表,我需要执行 2 个排序步骤。

  1. LocationType 升序排列。
  2. 对于每个位置类型值,按 Name 升序排列这些结果。

示例数据:

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

预期结果:

1. Melbourne
2. Templestowe
3. Templestowe Lower

Here is a (not working) .NET Fiddle ...

这是主要代码(从那个 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);
    }
}

最佳答案

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;

关于c# - 如何按两个属性对这个简单的 .NET 列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26607443/

相关文章:

c# - LINQ 如何在 using 语句中延迟执行

c# - 检查 Dictionary 在其任何键中是否具有值

c# - ASP缓存新手-尝试模拟WinForms功能/正确的协议(protocol)

c# - .xml、.ini 或 .txt 哪个读取速度快?

c# - 以编程方式在类的每个属性上插入方法调用

c# - linq中的左外连接

c# - 根据某个属性的值将一个列表拆分为多个列表

C# 将标志枚举类型变量中的设置标志转换为整数数组

c# - 双重导航时 Windows Phone 应用程序崩溃

c# - 协变分配不起作用