2015-05-22 21 views
5

böyle sipariş gereken bir sorgu var nesneleri. NULL değerleri sonuna nasıl yerleştirebilirim veya nesne boşsa nasıl sipariş verebilirim?Atla ThenBy

ADDED: as @ LasseV.Karlsen, BİR BAŞKA problem yaşayabileceğimi belirtti. Gerçekten ArgumentNullException aldım, ama bazı nesnelerin arkasında değildi nedeni null (hata ayıklayıcısında gördüm ve yanlış olduğunu düşündüm benim sorunumdu). @ RaphaëlAlthaus ben amaçlandığı gibi her şeyin nesne olsa bile çalışmaya başlamak yaptıktan sonra ben MonthClosureViewModel benim sınıfların HERHANGİ de IComparable<> ...

uygulamak olmadığını belirtildiği gibi gerçek nedeni oldu null

+0

bunu * başarısız nasıl * bize söyleyebilir l çek bir null başvuru İstisna) önlemek için gerekli olur? Temel olarak, istisna türü, istisna mesajı ve stacktrace nedir? "SonraByDescending", temsilci çağrısının sonucu "null" ise bir istisna alamaz, böylece başarısız olan başka bir şey olması gerekir. –

+0

Ya da "başarısız", yanlış sırayla sıralanmış veri üretmek gibi tamamen farklı bir şey anlamına mı geliyor? –

+0

@ LasseV.Karlsen, 'ArgumentNullException' ile başarısız. 'Kaynak 'veya' seçici 'null [msdn bağlantı] (https://msdn.microsoft.com/ru-ru/library/bb534736 (v = vs.110) .aspx) olduğunda' ThenByDescending' atar. – Szer

cevap

3

ya küçük veya tüm diğer nesneler daha büyük olacak şekilde tanımlamak gerçek bir sorun gerekir.

Eğer gerekecek mümkün hale getirmek için, ya

  1. Sınıflarınızdan üzerinde IComparable<T> uygulamak da almak argüman olarak bir IComparer<TKey> (msdn için OrderBy/OrderByDescending ait

  2. kullanımı, diğer yüklenmeleri OrderBy aşırı yükleme)

  3. Karmaşık özelliğin basit bir özelliğini siparişinize göre yan tümce (null check. ile birlikte kullanın. Bu durumda, nul Örneğin

:

.OrderByDescending(x => x.Project == null ? string.Empty : x.Project.Name) 
3

(Eğer mentionned gibi) sen defaultSite ve defaultChargeSite onların sınıfına sen karmaşık özellikleri ile sipariş etmek deneyin

var list = new List<MonthClosureViewModel>(); 
var orderedList = list 
    .Where(x => x != null); 
    .OrderByDescending(x => x.Project) 
    .ThenByDescending(x => x.ChargeLine) 
    .ThenByDescending(x => x.DomesticSite==null?defaultSite:x.DomesticSite) //<- x.DomesticSite might be null sometimes 
    .ThenByDescending(x => x.ChargeSite==null?defaultChargeSite:x.ChargeSite) //<- x.ChargeSite might be null sometimes 
    .ThenByDescending(x => x.RateGroup) 
    .ThenByDescending(x => x.ApprovedHrs) 
    .ThenByDescending(x => x.NotApprovedHrs); 
+6

muhtemelen 'x => x.DomesticSite ?? defaultSite 'aynısını yapacağız. Ben kesinlikle – Szer

+0

çalışacağım Kesinlikle doğru –

+3

Burada yanlış varsayım olduğunu 'ThenByDescending' null' işlemek mümkün olacak, ancak, null' karşılaşırsa, bir istisna alamaz. Bu şekilde, * bu bir sorun değil *. Bu nedenle problem başka bir yerde olmalı. –