Si desea que el índice del elemento, esto lo hará:
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();
Usted no puede deshacerse de la lambda en el primer pase.
Tenga en cuenta que esto arrojará si el artículo no existe. Esto resuelve el problema recurriendo a enteros con valores nulos:
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 usted quiere el artículo:
// 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 desea contar el número de elementos que coinciden con:
int count = list.Count(item => item == search);
// or
int count = (from item in list
where item == search
select item).Count();
Si desea todos los elementos que coinciden:
var items = list.Where(item => item == search);
// or
var items = from item in list
where item == search
select item;
Y no olvide verificar la lista para null
en cualquiera de estos casos.
O use (list ?? Enumerable.Empty<string>())
en lugar de list
.
Gracias a Pavel por ayudar en los comentarios.
Eso es grande. Sin embargo, esos son todos estilos de expresión lamda. Yo uso una lista simple aquí. La lista puede ser una clase con varias propiedades y algunas se usan para búsqueda. Entonces, cualquier forma de LINQ para buscar como "de ... en ... donde ... seleccionar ..." –
Nah, lo siento. La mayoría de estos métodos (Primero, Único, Cualquiera, ...) no se pueden * traducir * directamente a ese formulario. –
No importa, de hecho puede deshacerse de las lambdas por algunos casos ... –