Es gibt verschiedene Möglichkeiten, die Lesbarkeit Ihres Codes zu verbessern.
Einrückungen
Eine Möglichkeit ist, den Code auf eine etwas andere Art und Weise einrücken, aber das hilft nur Lesbarkeit ein wenig:
var result = result.OrderBy(a =>
conditionA ? valueA :
conditionB ? valueB :
conditionC ? conditionD ? valueC :
valueD :
valueE);
wenn, sonst
konnte Sie Auch diese ternären Operatoren werden in eine besser lesbare Kette von if
, else
umgewandelt.
var result = Result.OrderBy(a => {
if (conditionA)
{
return valueA;
}
else if (conditionB)
{
return valueB;
}
else if (conditionC)
{
if (conditionD)
{
return valueC;
}
else
{
return valueD;
}
}
else
{
return valueE;
}
});
IComparer <>
Eine Möglichkeit wäre, eine eigene Implementierung von IComparer<>
zu schreiben und an die OrderBy
-Methode übergeben. Ich weiß nicht, welchen Typ Ihr Objekt hat oder welchen Typ die Schlüssel in Ihrem Code haben, also gehe ich von string
Schlüsseln aus.
public class MyClassComparer : IComparer<MyClass>
{
public int Compare(MyClass x, MyClass y)
{
string xKey = getKey(x);
string yKey = getKey(y);
return string.Compare(xKey, yKey);
}
private string getKey(MyClass item)
{
if (item.conditionA)
{
return item.valueA;
}
else if (item.conditionB)
{
return item.valueB;
}
else if (item.conditionC)
{
if (item.conditionD)
{
return item.valueC;
}
else
{
return item.valueD;
}
}
else
{
return item.valueE;
}
}
}
Erweiterungsmethode
Eine letzte Option wäre, um Ihren Code zu einer Verlängerung Methode zu bewegen:
public static class MyClassExtensions
{
public static string GetSortingKey(this MyClass item)
{
if (item.conditionA)
{
return item.valueA;
}
else if (item.conditionB)
{
return item.valueB;
}
else if (item.conditionC)
{
if (item.conditionD)
{
return item.valueC;
}
else
{
return item.valueD;
}
}
else
{
return item.valueE;
}
}
}
die letzte Option verwenden, ist Ihr Anruf OrderBy
einfach:
result.OrderBy(a => a.GetSortingKey())
Fügen Sie den richtigen Einzug hinzu und richten Sie die Spalte aus Ons ':' mit ihren entsprechenden questio Marken '? –
[tag: ternary-operator]:" Ein ternärer Operator ist ** any ** Operator, der drei Argumente akzeptiert. Für den ternären Bedingungsoperator '?' ... ':' verwenden Sie '[tag: konditionaloperator]'. "(Mein * emphasis *) –
Besser noch * entfernen Sie alle Bedingungen *. Sie fügen' OrderBy' und ' ThenBy' Anweisungen im Code, sie sind nur Funktionen.Wenn Sie das Bestellfeld dynamisch angeben möchten, können Sie dies problemlos in LINQ –