Evo ti dva primera sortiranja IList<T>:
Code:
class Person
{
public int ID; public string ime;
}
class Program
{
static void Main(string[] args)
{
IList<Person> ilista = new List<Person>() { new Person() { ID = 12, ime = "Pera"},
new Person() { ID = 1, ime = "Zika"},
new Person() { ID = 7, ime = "Aska"}};
string imePolja = "ID";
FieldInfo field = ilista.GetType().GetGenericArguments()[0].GetField(imePolja);
var sortedlista = (from p in ilista
orderby field.GetValue(p)
select p).ToList();
var sortedlista2 = ilista.AsEnumerable().OrderBy(x => x.ime).ToList();
}
}
Oba u principu koriste IEnumerable<T>.OrderBy() za sortiranje, samo sto sortedlista koristi kroz LINQ to Objects, a sortedlista2 kroz direktan poziv ekstenzije. Takodje, sortedlista moze da se koristi univerzalno posto koristi refleksiju (imePolja moze da ti bude ime polje na koje je korisnik kliknuo u headeru tako da ne moras da imas poseban kod za svako posebno polje, sto je slucaj sa sortedlista2. Cena univerzalnosti je sto moras kroz refleksiju, i sto za property moras da koristis PropertyInfo umesto FieldInfo.