2011-07-22 123 views
9

可能重复:
Sorting a list using Lambda/Linq to objects
C# List<> OrderBy Alphabetical Order排序对象列表

我该如何去有关的字符串属性排序按字母顺序排列的对象的列表。

我已经尝试过在属性上实现IComparable,但我只想出如何对第一个字符(使用char)进行排序。

编辑:这里是一些示例代码。

class MyObject { 
    public string MyProperty {get;set;} 
} 

List<MyObject> sampleList = new List<MyObject>();  

MyObject sample = new MyObject(); 
sample.MyProperty = "Aardvark"; 

MyObject sample2 = new MyObject(); 
sample2.MyProperty = "Zebra"; 

sampleList.Add(sample); 
sampleList.Add(sample2); 

sampleList.Sort(); // or something similar 

foreach (var item in sampleList) { 
    Console.WriteLine(item.MyProperty); 
} 

应输出Aardvark和斑马(按字母顺序)。

谢谢!

+0

Linq to Objects – N0Alias

+0

也许这有助于http://stackoverflow.com/questions/722868/sorting-a-list-using-lambda-linq-to-objects – evilone

回答

8

你可以得到一个分类IEnumerable<MyObject>像这样:

var sortedQuery = sampleList.OrderBy(x => x.MyProperty); 

然后,您可以查询转换到一个列表,像这样:

var sortedList = sortedQuery.ToList(); 

或者,您也可以在项目只是重复:

foreach (var obj in sortedQuery) 
    Console.WriteLine(obj.MyProperty); 
3

假设您的集合实现IEnumerable接口,您可以只需拨打您收集OrderBy方法:

myCollection.OrderBy(c => c.Property); 
16

可以使用比较委派去做,用Sort(Comparision<T> comparision)超载。

list.Sort((a, b) => a.StringProperty.CompareTo(b.StringProperty)); 
1
var list = new List<SomeClass>(); 
// add some instances of SomeClass to list 
list.Sort((x, y) => x.SomeProperty.CompareTo(y.SomeProperty)); 
0

一定要包括System.Collections.Generic和System.Linq的。

List<myItemType> lst = new List<myItemType>(); 
    return lst.OrderBy(i => i.StringPropertyName); 
+0

嗨贾森 - 它返回枚举将枚举将枚举订购。我想你可以做lst =新列表(lst.OrderBy(...)); – Brian

2

将代码转换为C#,

如果你有一个列表对象ABC有一个字符串属性S代表列表中的每个对象,

昏暗MYLIST作为新的列表(美国广播公司)

Dim a = From i In Mylist _ 
      Order By i.S Ascending 

你将得到一个,放在一个迭代器。