2011-08-26 2 views
0

Dire que j'ai la liste suivante:Linq - Comment obtenir la position d'une valeur dans une liste

List<int> integerList = new List<int> { 
    1, 10, 13, 5, 7, 123, 47, 69, 22, 77, 94, 201, 120, 73, 98, 99, 101, 4, 6, 9, 19, 21, 24, 221, 909, 45, 27, 28, 29, 30, 
    }; 

Quelle requête Linq récupérera pour moi l'indice d'une certaine valeur dans la liste? En d'autres termes, j'aimerais une requête qui me retournerait une valeur d'index de 5 si je lui transmettais une valeur de '123'.

Merci.

+2

Quel est le problème avec 'integerList.IndexOf (123)'? –

Répondre

4

Eh bien l'approche la plus simple est de ne pas utiliser LINQ :)

int index = integerList.IndexOf(123); 

Toutefois, si vous devez:

var index = integerList.Select((value, index) => new { value, index }) 
         .Where(x => x.value == desiredValue) 
         .Select(x => (int?) x.index) 
         .FirstOrDefault(); 

qui vous donner un int? avec Valeur "null" si la valeur est introuvable ou le premier index correspondant dans le cas contraire. Vous pouvez le transformer en la régulière « utiliser -1 comme introuvable » en utilisant l'opérateur coalescent null:

var index = integerList.Select((value, index) => new { value, index }) 
         .Where(x => x.value == desiredValue) 
         .Select(x => (int?) x.index) 
         .FirstOrDefault() ?? -1; 
0
var result = integerList 
      .Select((i, idx) => new 
         { 
          Index = idx, 
          Value = i}) 
      .Where(comp => comp.Value == 123) 
      .FirstOrDefault(); 
+0

Cela renvoie une séquence – adrianm

+0

oui, c'est exact. J'ai ajouté un appel FirstOrDefault() – Jan

+0

Maintenant, il retourne un type anonyme ou null – adrianm

0

essayer le ci-dessous

var index= list.IndexOf(123); 
Questions connexes