2009-12-29 32 views
8

Ben Şimdi 2 farklı veritabanı tablolarından bazı sorgular alarak bu sınıfları yapmak Ben sadece bazı özellikleri Listede özellikli bir sınıf listesi listesi nasıl sıralanır?

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

var benim sınıflarında

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

gibi koleksiyonumda sınıfların bir listesi var. Daha sonra bu 2 sonucu veritabanı tablolarından alıp foreach döngüsünü kullanarak yeni bir MyClass nesnesi yapıyorum ve bunu "test" koleksiyonuma yapıştırıyorum.

Artık tüm bu sınıflar liste koleksiyonuna dahil edildi. Onları sıralamak ve "tarih" özelliği ile sınıfları sipariş etmek istiyorum.

Bunu nasıl yapabilirim? Onları veritabanından aldığımdan, onları 2 farklı veritabanı tablosundan alıyorum ve bunları ayrı ayrı sipariş etmek, sadece her bölüm için sipariş verebileceğinden sipariş veremem, ancak tablo 12/12/2009 olabilir ve iki masa. Bu yüzden birlikte sipariş edilmeleri gerekiyor.

Bazıları linq veya bunları sipariş etmek için bir şey nasıl kullanabilirim?

Teşekkür

cevap

20

ne dersiniz:

list.Sort((x,y) => DateTime.Compare(x.date, y.date)); 
Mevcut listeyi sıralar

veya:

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

hangi ikinci bir liste oluşturur. Eğer bir yerde sıralamak isterseniz

+0

Aşağıda bahsettiğim gibi, yayınlamadan önce ikinci yolu yapmaya çalıştım ama kullanmadım .ToList() Yani sıralanırken orderBy her zaman yeni bir liste oluşturur? – chobo2

+1

Evet. List.Sort, listeyi yerinde sıralar, böylece orijinal liste değiştirilir. LINQ (ikinci yöntem) yeni bir numaralandırır. "ToList" ekleyerek, IEnumerable yerine Listesine dönüştürün. Sonuçları bir foreach döngüsünde kullanacaksanız, "ToList()" yöntemini kapatabilirsiniz. –

+0

(ne dedi ki ...) –

2

Eğer listede sınıfları var ve liste tamamlandığında:

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

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

Ah ben Bunu denedi ama .ToList() arkasına koymadı. Bazı kişilerin herhangi bir avantaj ya da herhangi bir şey getiren karşılaştırma işlevini kullandığını gördüm. – chobo2

3

, sen List<T>.Sort kullanabilirsiniz:

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

yeni sonuç kümesinde halinde sıralamak isterseniz, LINQ çok güzel:

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