2010-01-12 3 views
2

J'ai ce simple morceau de codeordre IList avec le nom de domaine dans l'argumentation

public ActionResult ListToGrid(string field, string direction) 
{ 
    _model.MyList = _repo.List(); 
} 

Pour trier, je peux le faire:

_model.MyList = _employeeService.List().OrderBy(x => x.FirstName).ToList<Employee>(); 

Mais je voudrais utiliser « comme champ » la nom reçoit (champ) en argument et la direction reçue aussi.

Merci,

Répondre

2

Vous pourriez utiliser la réflexion, mais ce serait plutôt lent. Le plus efficace serait de déclarer un délégué à utiliser dans le genre, et assigner une fonction en fonction de la chaîne:

Func<Employee,string> order; 
switch (field) { 
    case "FirstName": order = x => x.FristName; 
    case "LastName": order = x => x.LastName; 
} 

Pour la direction, je pense qu'il est préférable d'utiliser simplement des codes distincts:

var list = _employeeService.List(); 
IEnumerable<employee> sorted; 
if (direction == "ascending") { 
    sorted = list.OrderBy(order); 
} else { 
    sorted = list.OrderByDescending(order); 
} 
_model.List = sorted.ToList<Employee>(); 
+0

pourrait vous donnez un exemple, comment utiliser "order" avec _model.MyList c'est un IList .... merci, –

+0

_model.MyList.OrderBy (commande) renvoie un IEnumerable . – Guffa

Questions connexes