Ho un componente che emette un ICollection del seguente tipo:
public class CoordinatedInjectableValue
{
public int XOffset { get; set; }
public int YOffset { get; set; }
public object Value { get; set; }
}
Questo è usato per descrivere ciò che è fondamentalmente un set di dati, quindi per un dato valore XOffset, la proprietà "Value" di tutti questi oggetti sarà dello stesso tipo (int, string, ecc.). La proprietà Value è sempre un tipo predefinito, non un tipo personalizzato.
La mia sfida è che mi piacerebbe utilizzare questa collezione per costruire una sorta di struttura di set di dati che consente l'ordinamento sulle colonne.
Ad esempio, se avessi una collezione che assomigliava a questa:
new List<CoordinatedInjectableValue>
{
new CoordinatedInjectableValue {XOffset = 0, YOffset = 0, Value = 20},
new CoordinatedInjectableValue {XOffset = 0, YOffset = 1, Value = 10},
new CoordinatedInjectableValue {XOffset = 0, YOffset = 2, Value = 30},
new CoordinatedInjectableValue {XOffset = 1, YOffset = 0, Value = "CCC"},
new CoordinatedInjectableValue {XOffset = 1, YOffset = 1, Value = "BBB"},
new CoordinatedInjectableValue {XOffset = 1, YOffset = 2, Value = "AAA"}
};
Voglio un metodo per poter riordinare in base alla prima "colonna" (cioè, dove XOffset = 0), in modo che la raccolta assomigli a questo:
new List<CoordinatedInjectableValue>
{
// Ordered by value where XOffset = 0
new CoordinatedInjectableValue {XOffset = 0, YOffset = 0, Value = 10},
new CoordinatedInjectableValue {XOffset = 0, YOffset = 1, Value = 20},
new CoordinatedInjectableValue {XOffset = 0, YOffset = 2, Value = 30},
new CoordinatedInjectableValue {XOffset = 1, YOffset = 0, Value = "BBB"}, // Note this has also been re-ordered
new CoordinatedInjectableValue {XOffset = 1, YOffset = 1, Value = "CCC"},
new CoordinatedInjectableValue {XOffset = 1, YOffset = 2, Value = "AAA"}
}
E se l'ho ordinato dalla seconda colonna (XOffset = 1), succederà quanto segue:
new List<CoordinatedInjectableValue>
{
// Ordered by value where XOffset = 1
new CoordinatedInjectableValue {XOffset = 0, YOffset = 0, Value = 30}, // Note this has also been re-ordered
new CoordinatedInjectableValue {XOffset = 0, YOffset = 1, Value = 10},
new CoordinatedInjectableValue {XOffset = 0, YOffset = 2, Value = 20},
new CoordinatedInjectableValue {XOffset = 1, YOffset = 0, Value = "AAA"},
new CoordinatedInjectableValue {XOffset = 1, YOffset = 1, Value = "BBB"},
new CoordinatedInjectableValue {XOffset = 1, YOffset = 2, Value = "CCC"}
};
Come puoi immaginare, ho qualche difficoltà a farlo, anche per l'ordinamento a livello singolo. Non ho nemmeno provato a implementare l'ordinamento a più livelli (ad esempio, ordinare per questo, quindi quello).
Sto cercando un qualche tipo di approccio logico a questo. Preferirei non dover cambiare il componente che restituisce questi dati, dato che è fornito da una terza parte, e sarebbe costoso cambiarli.