ich eine Abfrage haben, die so bestellt werden sollte:überspringen ThenBy auf NULL festlegbare Objekte
var list = new List<MonthClosureViewModel>();
var orderedList = list
.OrderByDescending(x => x.Project)
.ThenByDescending(x => x.ChargeLine)
.ThenByDescending(x => x.DomesticSite) //<- x.DomesticSite might be null sometimes
.ThenByDescending(x => x.ChargeSite) //<- x.ChargeSite might be null sometimes
.ThenByDescending(x => x.RateGroup)
.ThenByDescending(x => x.ApprovedHrs)
.ThenByDescending(x => x.NotApprovedHrs);
public class MonthClosureViewModel
{
public Project Project { get; set; }
public ChargeLine ChargeLine { get; set; }
public Site DomesticSite { get; set; }
public Site ChargeSite { get; set; }
public RateGroup RateGroup { get; set; }
public decimal Rate { get; set; }
public decimal ApprovedHrs { get; set; }
public decimal NotApprovedHrs { get; set; }
}
Aber wenn jedes Objekt null ist (total durch Design) diese Abfrage fehlschlägt. Wie kann ich Null-Werte am Ende setzen oder die Reihenfolge überspringen, wenn das Objekt null ist?
HINZUGEFÜGT: als @ LasseV.Karlsen erwähnt ich könnte ein anderes Problem haben. Ich habe wirklich ArgumentNullException
, aber der Grund war nicht hinter einem Objekt waren null
(Ich sah es im Debugger und fälschlicherweise dachte, dass es mein Problem war). Der wahre Grund war, als @ RaphaëlAlthaus erwähnt, dass ich nicht IComparable<>
auf jedem meiner Klassen in MonthClosureViewModel
geführt habe ...
Nachdem ich es alles getan habe, beginnen, wie beabsichtigt arbeiten, auch wenn Objekt null
Können Sie uns sagen, * wie * es scheitert? Was ist der Ausnahmetyp, die Ausnahmebedingungsnachricht und der Stacktrace? 'ThenByDescending' wird keine Ausnahme auslösen, wenn das Ergebnis des Aufrufs dieses Delegaten 'null' ist, also muss etwas anderes fehlschlagen. –
Oder bedeutet "fehlgeschlagen" etwas völlig anderes, als würden Daten in der falschen Reihenfolge sortiert? –
@ LasseV.Karlsen es scheitert mit 'ArgumentNullException'. 'ThenByDescending' löst es aus, wenn' source' oder 'selector' auf null gesetzt ist (msdn link) (https://msdn.microsoft.com/ru-ru/library/bb534736 (v = vs.110) .aspx). – Szer