2009-12-29 47 views
8

我有类的列表在我的收藏像如何对具有属性的类的列表集合进行排序?

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

在我的班级我都只是一些性质

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

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

现在,所有这些类都放在列表集合中。我想对它们进行排序并通过“日期”属性排序类。

我该怎么做?当我从数据库中获取它们时,我不能排序,因为我从两个不同的数据库表中获取它们,并单独对它们进行排序只会使其为每个部分排序,但表格可能有12/12/2009,因此可能会表二。所以他们需要一起订购。

所以我可以如何使用linq或其他东西来订购它们?

感谢

回答

20

如何:

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

这种种现有列表,或者:

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

这创建了第二个列表。

+0

雅如我在下面提到的我尝试做第二种方式之前,我发布但没有使用.ToList()所以orderBy总是创建一个新的列表,而排序不? – chobo2 2009-12-29 20:01:15

+1

是的。 List.Sort对列表进行排序,以便更改原始列表。 LINQ(第二种方法)创建一个新的枚举。通过添加“ToList”,您可以将它变成列表而不是IEnumerable 。如果你只是在foreach循环中使用结果,你可以关闭“ToList()”方法。 – 2009-12-29 20:02:55

+0

(他说...) – 2009-12-29 20:21:54

2

一旦你有你的类在你的列表,该列表是完整的:

List<MyClass> testList = new List<MyClass>(); 
// populate the list... 

var orderedList = testList.OrderBy(x => x.date).ToList(); 
+0

啊我尝试过,但没有把它放在.ToList()后面。我看到一些人使用比较功能是否带来了任何优势或者什么? – chobo2 2009-12-29 20:00:21

3

如果你想他们在的地方进行排序,你可以使用List<T>.Sort

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

如果你想将它们整理到一个新的结果集,LINQ是非常好的:

var sortedResults = from mc in test 
        order by mc.date 
        select mc; 
相关问题