gibi özelliklere sahip olan Order adlı bir sınıfım var OrderId , OrderDate , Quantity , ve Total . Bu Order sınıfının bir listesi var:
şimdi listeyi Order nesnesinin bir özelliğine göre sıralamak istiyorum, örneğin sipariş tarihine veya sipariş kimliğine göre sıralamam gerekiyor.
bunu C# ' de nasıl yapabilirim?
tarihinde sordu poke 2010-07-22 17:13:25
düşünebildiğim en kolay yol Linq kullanmaktır:
cevap Lazarus 2015-03-20 23:54:49
listeyi yerinde sıralamanız gerekiyorsa, Sort yöntemini, Comparison<T> delege:
yerinde sıralamak yerine yeni, sıralanmış bir dizi oluşturmayı tercih ederseniz, LİNQ OrderBy yöntemini diğer cevaplarda belirtildiği gibi kullanabilirsiniz.
cevap LukeH 2010-07-22 17:28:33
LİNQ olmadan bunu yapmak için .Net2.0:
eğer açarsan .Net3.0, sonra Lukeh'in cevabı peşinde olduğunuz şeydir.
birden çok özellik üzerinde sıralamak için, yine de bir temsilci içinde yapabilirsiniz. Örneğin:
bu artan tarihleri azalan orderİds verecektir.
Ancak, Ben bu kod yeniden kullanımı olmadan yerlerde bir sürü anlamına gelecektir olarak delegeleri yapışmasını tavsiye etmem. Bir IComparer uygulamak ve sadece Sort yöntemine geçmek gerekir. Bkz. burada .
ve daha sonra bu IComparer sınıfını kullanmak için, onu örnekleyin ve sıralama yönteminize geçirin:
cevap GenericTypeTea 2017-05-23 14:47:29
bir liste sipariş etmenin en basit yolu OrderBy
aşağıdaki SQL sorgusu gibi birden çok sütun tarafından sipariş etmek istiyorsanız.
bunu başarmak için aşağıdaki gibi ThenBy kullanabilirsiniz.
cevap PSK 2018-06-13 10:41:39
dediğiniz gibi Linq olmadan yapıyor:
sonra Ara .sıralama () siparişlerin listenizde
cevap Jimmy Hoffa 2014-01-30 20:36:40
Klasik Bir Nesne Yönelimli Çözüm
önce LİNQ awesomeness genuflect gerekir.... Şimdi
JimmyHoffa cevabında bir varyasyon. Jeneriklerle CompareTo parametresi tip güvenli hale gelir.
bu varsayılan sortability elbette yeniden kullanılabilir. Yani her istemci gereksiz sıralama mantığı yeniden yazmak zorunda değildir. Tokuş "1" ve " -1 " (veya mantık operatörleri, seçiminiz) sıralama sırasını tersine çevirir.
cevap radarbob 2017-02-11 08:41:48
/ / bir gridview
ile kullanım için tamamen genel sıralama
cevap roger 2013-06-13 05:37:08
işte listenin ekstra bir kopyasını oluşturmayan genel bir LINQ uzantısı yöntemidir:
geçenlerde bir ICompare<U> kabul eden bu ek bir tane inşa ettim , böylece karşılaştırmayı özelleştirebilirsiniz. Doğal bir dize yapmak gerektiğinde bu kullanışlı geldi sıralama:
cevap Peter 2014-04-09 01:06:09
cevap Daniel A. White 2010-07-22 17:16:27
cevap Waqas Ahmed 2011-11-24 01:51:44
Roger'ın versiyonunun geliştirilmiş.
GetDynamicSortProperty ile ilgili sorun sadece özellik adlarını almaktır, ancak Gridview'de NavigationProperties kullanırsak ne olur? boş bulduğu beri bir istisna göndereceğiz.
"çalışan.Misafir.İsim; " çökecek... bu yana değerini almak için bir parametre olarak sadece "isim" sağlar.
işte sıralamamızı sağlayan geliştirilmiş bir versiyon navigasyon özelliklerine göre.
cevap user1013375 2013-07-04 18:32:52
özellik seçimi hakkında daha genel bir şey yapabilir, ancak 'sipariş':
işlevinizi genel olarak yazın:
ve sonra şu şekilde kullanın:
daha genel olabilir ve sipariş etmek istediğiniz şey için açık bir tür tanımlayabilirsiniz:
ve aynı şekilde kullanın:
LİNQ tarzı'OrderBy' yapmanın aptalca ve karmaşık bir yoludur, Ancak,
genel bir şekilde nasıl uygulanabileceğine dair bir ipucu verebilir
cevap Danny Mor 2015-04-02 13:26:08
lütfen @LukeH tarafından cevabı bazı örnek kodlarla tamamlamama izin verin, çünkü test ettim, bazıları için yararlı olabileceğine inanıyorum:
cevap molbalga 2016-07-19 13:18:06
yukarıdaki cevapların hiçbiri benim için yeterince genel değildi, bu yüzden bunu yaptım:
büyük veri kümelerine dikkat edin. Bu kolay kod ama koleksiyon büyük ve koleksiyonun nesne türü alanları çok sayıda varsa sorun alabilir. Çalışma süresi nxm nerede:
n = koleksiyondaki öğelerin #
M = # nesne içindeki özellikler
cevap itcropper 2016-08-22 21:45:36
cevap Jevgenij Kononov 2017-05-31 11:26:36
LiNQ kullanımı OrderBy
cevap Pranay Rana 2010-07-22 17:16:31
dayalı GenericTypeTea 'S karşılaştırıcı:
sıralama bayrakları ekleyerek daha fazla esneklik elde edebiliriz:
bu senaryoda, myorderingclass açıkça( daha ziyade IComparer olarak örneği gerekir )
sıralama özelliklerini ayarlamak için:
cevap Jack Griffin 2015-01-06 17:05:49
en iyisi sıralanmış bir liste kullanmaktır, böylece sonuç olarak eklenen veriler sıralanır. Diğer yaklaşımların veriler üzerinde en az bir ekstra yinelemeye ihtiyacı vardır ve çoğu verilerin bir kopyasını oluşturur, böylece yalnızca performans değil, bellek kullanımı da etkilenir. Yüzlerce öğe ile ilgili bir sorun olmayabilir, ancak binlerce, özellikle de birçok eşzamanlı isteğin aynı anda sıralama yapabileceği hizmetlerde olacaktır. Sisteme bir göz atın.Koleksiyon.Genel ad alanı ve liste yerine sıralama ile bir sınıf seçin.
ve mümkünse yansıma kullanarak genel uygulamalardan kaçının, bu da performans sorunlarına neden olabilir.
cevap user3285954 2014-07-31 15:53:17
nullable türleri ile çalışan Value CompareTo kullanmak için gereklidir .
cevap Jude 2017-01-19 18:35:41
Diğer sorular c# generics sorting list