按对象的内部字段</t>排序列表<t>

时间:2012-08-28 11:33:05

标签: c# linq list ienumerable

考虑以下代码

class Pin
{
   string Name; //can be either Numerical or AlphaNum
}

enum Place
{
    Left,
    Right
}

class Map
{
   Pin pin;
   Place Place;
   Rectangle Rect;
}

Pin&#39; Name字段只能是数字或字母数字,所以我按字符串来支持两者。

现在我的问题是,如果我有一个List<Map>,我如何通过Pin的名称字段对此列表进行排序?我尝试了下面的代码,但它无法编译:

map.Sort((x, y) => x.Pin.Name.CompareTo(y.Pin.Name)); 
//Cannot implicitly convert type 'void' to 'System.Collections.Generic.List<DataModels.PinMap>

3 个答案:

答案 0 :(得分:9)

您展示的代码不会产生编译器错误。我假设您正在尝试将结果分配给新变量或自身。像这样:

map = map.Sort(...);

这是不可能或不必要的,因为List<T>.Sort正在进行就地排序,即它会更改原始列表,因此不会返回任何内容。因此,简单地删除赋值应该会使编译器错误消失。

如果您不想进行就地排序,只需将Enumerable.OrderByToList结合使用即可生成新列表:

var result = map.OrderBy(x => x.pin.Name).ToList();

答案 1 :(得分:1)

LINQ救援:

var ordered = map.OrderBy(x => x.pin.Name);

当然,假设地图中的任何一个引脚都不是null。如果它可以为null,那么:

var ordered = map.Where(x => x.pin != null).OrderBy(x => x.pin.Name);

答案 2 :(得分:0)

使用Linq。

map = (from a in allAgents
      orderby a.AgentId
      select a).ToList<Map>();