Si vous voulez l'index de l'élément, cela le fera :
int index = list.Select((item, i) => new { Item = item, Index = i })
.First(x => x.Item == search).Index;
// or
var tagged = list.Select((item, i) => new { Item = item, Index = i });
int index = (from pair in tagged
where pair.Item == search
select pair.Index).First();
Vous ne pouvez pas vous débarrasser de la lambda dans la première passe.
Notez que cette opération sera rejetée si l'élément n'existe pas. Cela résout le problème en recourant à des ints nullables :
var tagged = list.Select((item, i) => new { Item = item, Index = (int?)i });
int? index = (from pair in tagged
where pair.Item == search
select pair.Index).FirstOrDefault();
Si vous voulez l'article :
// Throws if not found
var item = list.First(item => item == search);
// or
var item = (from item in list
where item == search
select item).First();
// Null if not found
var item = list.FirstOrDefault(item => item == search);
// or
var item = (from item in list
where item == search
select item).FirstOrDefault();
Si vous voulez compter le nombre d'éléments qui correspondent :
int count = list.Count(item => item == search);
// or
int count = (from item in list
where item == search
select item).Count();
Si vous voulez tous les articles qui correspondent :
var items = list.Where(item => item == search);
// or
var items = from item in list
where item == search
select item;
Et n'oubliez pas de vérifier la liste pour null
dans l'un ou l'autre de ces cas.
Ou utilisez (list ?? Enumerable.Empty<string>())
au lieu de list
.
Merci à Pavel pour son aide dans les commentaires.
0 votes
C'est très bien. Cependant, ce sont tous des styles d'expression lamda. J'utilise ici une simple liste. La liste peut être une classe avec plusieurs propriétés et certaines sont utilisées pour la recherche. Donc n'importe quelle façon LINQ de rechercher comme "from .. in ... where... select..."
0 votes
Non, désolé. La plupart de ces méthodes (First, Single, Any, ...) ne peuvent pas être directement traduit sous cette forme.
0 votes
Peu importe, en fait on peut se débarrasser des lambdas dans certains cas...
0 votes
Excellentes réponses ! Je veux juste avoir un aperçu de la recherche LINQ à partir d'une énumération.