按属性c#排序对象列表

时间:2012-03-15 08:38:05

标签: c# list sorting

我有这堂课:

public class Leg
{
    public int Day { get; set; }
    public int Hour { get; set; }
    public int Min { get; set; }
}

我有一个获取腿列表的函数,名为GetLegs()

List<Leg> legs = GetLegs();

现在我想对此列表进行排序。所以我首先要考虑的是日,然后是小时,最后是分钟。 我该如何解决这种排序?

由于

5 个答案:

答案 0 :(得分:10)

也许是这样的:

List<Leg> legs = GetLegs()
                .OrderBy(o=>o.Day)
                .ThenBy(o=>o.Hour)
                .ThenBy(o=>o.Min).ToList();

答案 1 :(得分:1)

您可以撰写自定义IComparer<Leg>并将其传递给List<T>.Sort方法。

或者,您可以在班级中实施IComparable<Leg>,只需致电List<T>.Sort

答案 2 :(得分:0)

使用Enumerable.OrderBy方法。

答案 3 :(得分:0)

我想这会有所帮助。

var o = legs.OrderBy(x => x.Day)
            .ThenBy(x => x.Hour)
            .ThenBy(x => x.Min);

答案 4 :(得分:0)

您需要在类上实现IComparable<T>接口,以便更直观地使用C#语言对对象进行排序。当一个类实现IComparable时,您还必须实现public method CompareTo(T).

Leg类实现IComparable<Leg>,这意味着可以将Leg实例与其他Leg实例进行比较。

    #region "Leg Class that implements IComparable interface"
    public class Leg:IComparable<Leg>
    {
        public int Day { get; set; }
        public int Hour { get; set; }
        public int Min { get; set; }

        public int CompareTo(Leg leg)
        {
            if (this.Day == leg.Day)
            {
                if (this.Hour == leg.Hour)
                {
                    return this.Min.CompareTo(leg.Min);
                }
            }
            return this.Day.CompareTo(leg.Day);
        }
    }
    #endregion


   //Main code
   List<Leg> legs = GetLegs();
   legs.Sort();