2009-06-12 9 views
3

J'ai une table avec une liste de pays que j'utilise pour remplir une liste déroulante.Comment puis-je utiliser LINQ pour renvoyer une liste de pays mais placer un pays en particulier en haut de la liste?

Comment puis-je construire une requête LINQ afin qu'elle retourne la liste des pays de cette table dans l'ordre alphabétique, à l'exception de placer les États-Unis au sommet?

Ainsi, si la table contenait:

Suède
USA
Mexique
Danemark

Il retournerait:

USA
Danemark
Mexique
Suède

?

+0

S'il vous plaît ne pas le faire. C'est difficile à utiliser. Au lieu de cela, présélectionner toute la liste que vous remplissez le pays "par défaut" souhaité –

+0

@ Michael Haren, j'essaie juste de suivre l'exigence décrite pour cette application. Je suis d'accord que ça ne devrait pas être comme ça. – KingNestor

Répondre

5

Vous pouvez utiliser comme commande secondaire le nom du pays:

return countries.OrderBy(c => GetPrimaryOrdering(c)).ThenBy(c => c.Name); 

int GetPrimaryOrdering(Country country) 
{ 
    return country.Name == "USA" ? 0 : 1 
} 
0
  1. Ajoutez les États-Unis à la liste déroulante.

  2. Ajouter une liste de pays après triés par ordre alphabétique. .

Le menu déroulant contrôle préservera l'ordre que vous avez ajouté les articles dans

3

Essayez cette (une seule ligne):

var Countries = new List<string>() { "Denmark", "USA", "Mexico" }; 
return Countries.OrderBy(c=> c=="USA"? " ": c); 

Explication:

Ce trie les liste des pays par nom, en remplaçant "" par celui qui devrait être le premier. Étant donné que les espaces sont précédés d'une autre lettre par ordre alphabétique, le pays "par défaut" apparaît en premier.

0

Ridicule ...

var lst = new List<string>() 
    { "Sweden", "USA", "Mexico", "Denmark", "Ziptown" }; 

lst.Sort((x, y) => 
{ 
    if (x == "USA" || y == "USA") 
    { 
    if (x == y) 
    { 
     return 0; 
    } 

    return (x == "USA") ? -1 : 1; 
    } 
    else 
    { 
    return x.CompareTo(y);  
    } 
} 
Questions connexes