2010-01-01 15 views
79

Şimdi benim linq ben ancak bitiş tarihine kullanarak sipariş etmek istiyorumLinq'de 2 alanlı sipariş nasıl kullanılır?

var hold = MyList.OrderBy(x => x.StartDate).ToList(); 

için şimdiye kadar bu OrderBy var ben bir veritabanı tablosu

id = 1 
StartDate = 1/3/2010 
EndDate = 1/3/2010 

id = 2 
StartDate = 1/3/2010 
EndDate = 1/9/2010 

bu değerleri olduğunu varsayalım.

böylece gibi düzen ı büyüktür ilk go Yani

id 2 
id 1 

endDates olarak bu isteyeyim. Bazı karşılaştırma işlevlerini kullanmak için bunu değiştirmem gerekip gerekmediğinden emin değilim.

+4

olası yinelenen [ LINQ'da "order by" (http://stackoverflow.com/questions/298725/multiple-order-by-in-linq) – Moes

cevap

135
MyList.OrderBy(x => x.StartDate).ThenByDescending(x => x.EndDate); 
38

Kullanım ThenByDescending:

var hold = MyList.OrderBy(x => x.StartDate) 
       .ThenByDescending(x => x.EndDate) 
       .ToList(); 

Ayrıca sorgu sözdizimini kullanın ve söyleyebiliriz:

var hold = (from x in MyList 
      orderby x.StartDate, x.EndDate descending 
      select x).ToList(); 

ThenByDescendingOrderBy tarafından döndürülen budur IOrderedEnumerable üzerinde bir uzantısı yöntemidir. Ayrıca ThenBy ilgili yönteme bakınız. OrderBy yanı Azalan kelime kullanabilirsiniz

+0

Teşekkürler - Yapının bekletme türünü de biliyor musunuz? MyList öğelerinin bir listesi? – BKSpurgeon

3

VB.NET

MyList.OrderBy(Function(f) f.StartDate).ThenByDescending(Function(f) f.EndDate) 

VEYA

From l In MyList Order By l.StartDate Ascending, l.EndDate Descending 
+2

'l'den başlayarak MyList Sırasıyla l.StartDate Artan Sırasıyla l.EndDate Azalan and ve L MyList Sırasından l.StartDate Artarak, .EAradımla Azalan’ arasında bir fark var mı? – Oleksandr

+0

@Oleksandr Evet, Abdul'ın varyantı sadece ikinci düzeni yapmakla eşdeğerdir, bu yüzden doğru değildir. – John

+0

@John ve @ oleksandr Hatayı tanımladığınız için teşekkürler düzeltildi. –

4
MyList.OrderBy(x => x.StartDate).ThenByDescending(x => x.EndDate); 

Not (durumda gerekir). Yani başka bir olası yanıt:

MyList.OrderByDescending(x => x.StartDate).ThenByDescending(x => x.EndDate); 
1

Bunu denemek sipariş iki veya daha fazla alanı varsa:

var soterdList = initialList.OrderBy(x => x.Priority). 
            ThenBy(x => x.ArrivalDate). 
            ThenBy(x => x.ShipDate); 

Sen clasole ile diğer alanlar ekleyebilirsiniz "ThenBy" Birden ait