Claro, es bastante fácil:
var index = list.Select((value, index) => new { value, index = index + 1 })
.Where(pair => SomeCondition(pair.value))
.Select(pair => pair.index)
.FirstOrDefault() - 1;
Eso devolverá el índice si encuentra algo que coincida, o -1 en caso contrario. El +1 y -1 es para obtener el comportamiento para el caso donde no hay coincidencias. Si supieras que siempre habría un partido, sería más simple:
var index = list.Select((value, index) => new { value, index })
.Where(pair => SomeCondition(pair.value))
.Select(pair => pair.index)
.FirstOrDefault();
Si usted es feliz para obtener el resto de la lista a partir de ese punto en adelante, SkipWhile
es sin duda su amigo, como se ha mencionado por Chris . Si desea que el resto de la lista y el índice original, que también es fácil:
var query = list.Select((value, index) => new { value, index })
.SkipWhile(pair => !SomeCondition(pair.value))
qué le dará una secuencia de pares { value, index }
del primer valor a juego SomeCondition
.
+1 por mencionar que probablemente quiera usar 'SkipWhile', porque encontrar el índice y luego llamar a 'Skip' enumera la consulta dos veces – Gabe
Tan cerca ... ahora quiero usar SkipWhile junto con un contador, es decir, una lista. SkipWhile (myBusinessLogicCondition && list.Count - SkipIndex> someXnumber); – user494352
user494352: Parece que quieres ver la 'lista.del.Presidente de Jon (Seleccionar) SkipWhile()' al final de su publicación. – Gabe