【问题标题】:How to sort a List collection of classes with properties in them?如何对具有属性的类列表集合进行排序?
【发布时间】:2010-12-30 21:33:12
【问题描述】:

我的收藏中有一个类列表,例如

List<MyClass> test = new List<MyClass>();

在我的课程中,我只有一些属性

public string id {get; set;}
public DateTime date {get; set;}

现在我通过从 2 个不同的数据库表中获取一些查询来创建这些类。然后,我从数据库表中获取这两个结果,并使用 foreach 循环创建一个新的 MyClass 对象并将其粘贴到我的“测试”集合中。

现在一旦将所有这些类都放入列表集合中。我想对它们进行排序并按“日期”属性对类进行排序。

我怎么能这样做?当我从数据库中获取它们时,我无法立即订购,因为我是从 2 个不同的数据库表中获取它们并单独订购它们只会使它在每个部分中订购,但表一个可能有 2009 年 12 月 12 日,所以可能表二。所以需要一起订购。

那么我可以知道如何使用 linq 或其他东西来订购它们吗?

谢谢

【问题讨论】:

    标签: c# .net asp.net-mvc linq sorting


    【解决方案1】:

    怎么样:

    list.Sort((x,y) => DateTime.Compare(x.date, y.date));
    

    对现有列表进行排序,或者:

    var sorted = list.OrderBy(x=>x.date).ToList();
    

    创建第二个列表。

    【讨论】:

    • 是的,正如我在下面提到的,我在发布之前尝试过第二种方式,但没有使用 .ToList() 所以 orderBy 总是创建一个新列表,而 sort 没有?
    • 是的。 List.Sort 对列表进行就地排序,因此原始列表被更改。 LINQ(第二种方法)创建一个新的枚举。通过添加“ToList”,您可以将其转换为 List 而不是 IEnumerable。如果您只想在 foreach 循环中使用结果,则可以关闭“ToList()”方法。
    • 我们可以为一个名为“Name”的字符串类型的属性进行排序吗...如下所示..... var list2 = list1.where(o=>o.Name.contains(" test")).orderby(o=>o.Name).Take(10).toList();
    【解决方案2】:

    如果你想就地排序,可以使用List&lt;T&gt;.Sort

    test.Sort( (l,r) => l.date.CompareTo(r.date) );
    

    如果你想将它们排序到一个新的结果集中,LINQ 非常好:

    var sortedResults = from mc in test
                        order by mc.date
                        select mc;
    

    【讨论】:

      【解决方案3】:

      一旦你的课程在你的列表中,并且列表是完整的:

      List<MyClass> testList = new List<MyClass>();
      // populate the list...
      
      var orderedList = testList.OrderBy( x => x.date ).ToList();
      

      【讨论】:

      • 啊,我试过了,但没有把 .ToList() 放在后面。我看到有些人使用比较功能有什么好处吗?
      猜你喜欢
      • 1970-01-01
      • 2011-02-10
      • 2021-04-15
      • 1970-01-01
      • 2011-03-29
      • 2022-11-23
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多