sirve que para firstordefault first example entre diferencia consultas c# linq .net-3.5 c#-3.0

c# - que - LINQ: seleccionando el segundo elemento en IEnumerable



linq difference first firstordefault (5)

Bueno, Take(1) no es estrictamente necesario si solo vas a First() , así que podría ir con

pkgratio.Skip(1).First();

Sin embargo, First() arrojará una excepción si no hay ningún valor, por lo que es posible que desee probar FirstOrDefault() y luego comprobar si no tiene valor.

yo tengo

string[] pkgratio= "1:2:6".Split('':'');

var items = pkgratio.OrderByDescending(x => x);

Quiero seleccionar el valor medio y he propuesto esto. ¿Es esta una forma correcta de seleccionar el segundo valor en un IEnumberable?

pkgratio.Skip(1).Take(1).First();


Mientras que lo que tienes funciona, la forma más directa sería usar el índice de la matriz y hacer referencia al segundo elemento (en el índice 1 ya que el índice comienza en cero para el primer elemento): pkgratio[1]

Console.WriteLine(pkgratio[1]);

Un ejemplo más completo:

string[] pkgratio = "1:2:6".Split('':''); for (int i = 0; i < pkgratio.Length; i++) Console.WriteLine(pkgratio[i]);

Con un IEnumerable<T> lo que tiene funciona, o puede obtener directamente el elemento utilizando el método ElementAt :

// same idea, zero index applies here too var elem = result.ElementAt(1);

Aquí está su muestra como IEnumerable<string> . Tenga en cuenta que la llamada AsEnumerable() es para enfatizar que la muestra funciona en contra de una IEnumerable<string> . En realidad, puedes usar ElementAt contra el resultado del array string[] de Split , pero es más eficiente usar el indexador mostrado anteriormente.

var pkgratio = "1:2:6".Split('':'').AsEnumerable(); Console.WriteLine(pkgratio.ElementAt(1));


No creo que sea necesario. .Take(1) .

pkgratio.Skip(1).First()


Pero en este caso tienes una matriz, por lo que puedes obtener el segundo elemento muy felizmente usando:

pkgratio[1]


pkgratio.ElementAt(1); para su escenario.

Sin embargo, su método solo es aplicable si estaba usando algunos datos que implementaron IQueryable o si necesitaba tomar un rango de elementos comenzando en un índice específico, por ejemplo:

pkgratio.Skip(5).Take(10);