Tengo un IQueryable que está ordenado por alguna condición. Ahora quiero saber la posición de un elemento particular en ese IQueryable. Hay una expresión linq para obtener eso. Diga por ejemplo, hay 10 elementos en la IQueryable y el sexto elemento coincide con una condición, quiero obtener el número 6.Determinar la posición de un elemento en un IQueryable
Respuesta
Primero seleccione cada elemento con su índice, luego filtrar los artículos, y finalmente extraer el índice original: cama
var result = orderedList
.Select((x, i) => new { Item = x, Index = i })
.Where(itemWithIndex => itemWithIndex.Item.StartsWith("g"))
.FirstOrDefault();
int index= -1;
if (result != null)
index = result.Index;
prueba:
class Program
{
static void Main(string[] args)
{
var orderedList = new List<string>
{
"foo", "bar", "baz", "qux", "quux",
"corge", "grault", "garply", "waldo",
"fred", "plugh", "xyzzy", "thud"
}.OrderBy(x => x);
// bar, baz, corge, foo, fred, garply, grault,
// plugh, quux, qux, thud, waldo, xyzzy
// Find the index of the first element beginning with 'g'.
var result = orderedList
.Select((x, i) => new { Item = x, Index = i })
.Where(itemWithIndex => itemWithIndex.Item.StartsWith("g"))
.FirstOrDefault();
int index= -1;
if (result != null)
index = result.Index;
Console.WriteLine("Index: " + index);
}
}
Salida:
Index: 5
+ 1- Lo hice de la misma manera en mi respuesta. – RichardOD
¿Esta solución genera SQL para todas las operaciones o selecciona todos los elementos de IQueryable y solo después de eso hace que el funcionamiento en la memoria? –
Se podría utilizar algo como query.TakeWhile(x => !matchesCondition(x)).Count()
, sin embargo, que tiene el efecto de la enumeración de los valores anteriores, que puede no ser lo que quieres
Tienes que enumerar todos los valores precedentes, ¿no? – treaschf
Solución interesante. Sería correcto enumerar los valores anteriores si fuera un objeto de memoria, pero no para un DB. Tenga en cuenta que si el elemento no está en la lista, esta función devuelve la longitud de la lista. Normalmente, usted esperaría que tales funciones retornaran -1 o quizás nulo. –
@Mark Byers: Leí el fraseo de la pregunta como que implica que se sabía que el elemento deseado estaba presente, y solo se deseaba la posición; y el escenario DB era de hecho mi preocupación por enumerar. En la práctica, sospecho que hacer esto a un IQueryable es imprudente, pero como un truco rápido, este enfoque es al menos breve y comprensible. –
También puede usar la versión de la función "Dónde" que incluye el índice de recopilación como un parámetro para el predicado fu nction. Vea MSDN para más información.
var result = Enumerable.Range(0, 10).Where((x, i) => i == 6);
La versión podría dar como resultado una lista vacía si no hay un 6º elemento. Además, esto no evalúa la cláusula where hasta que itere sobre el resultado.
- 1. Encontrar la posición de un elemento en una matriz sencilla
- 2. ¿Cómo obtener la posición de un elemento en un StackPanel?
- 3. ¿Obtiene la posición de un elemento dentro de un ListView?
- 4. ¿Cómo obtener la posición de un elemento en UIWebView?
- 5. ¿Encontrar la posición de un elemento en una matriz bidimensional?
- 6. insertar un elemento en una posición específica de un vector
- 7. Rotación de un elemento según la posición del cursor en un elemento separado
- 8. ¿Cómo puedo obtener la posición de un elemento hijo en relación con un elemento primario?
- 9. Buscar la posición de un elemento dentro de una lista
- 10. Obtener la posición del texto dentro de un elemento
- 11. ¿Cómo obtener la posición() de un elemento XElement?
- 12. ¿Cómo obtengo la posición de un elemento hijo
- 13. Cómo insertar un elemento después de la posición del iterador
- 14. Obtener la posición inferior y derecho de un elemento
- 15. ¿Cómo obtener la posición superior de un elemento?
- 16. Determinar si un elemento es un campo de formulario
- 17. jquery, mueve un elemento interno a la primera posición?
- 18. encuentra la posición de un elemento relativo al último padre con posición relativa con javascript
- 19. Android: ¿Cómo determinar el índice de caracteres de la posición de un evento táctil en TextView?
- 20. ¿Forzar un IQueryable para ejecutar?
- 21. Cómo determinar la posición de UIBarButtonItem en UIToolbar?
- 22. Cómo determinar la posición del cursor de texto en Windows
- 23. Encuentra la posición de un elemento dentro de su elemento primario con XSLT/XPath
- 24. posición del elemento en la matriz
- 25. Obtiene elemento en la posición especificada - JavaScript
- 26. Ajuste de la posición de intercalación a un nodo vacío dentro de un elemento contentEditable
- 27. ¿Cómo se calcula la posición de la página de un elemento dom cuando el cuerpo puede estar en posición relativa?
- 28. Posición CSS: fijo dentro de un elemento posicionado
- 29. Conseguir posición absoluta de un elemento con respecto al navegador
- 30. Un diccionario de diccionario de IQueryable
¿No desea obtener el número 5 si el 6 ° elemento coincide? Normalmente, el primer elemento tiene el índice 0, el segundo tiene el índice 1, etc. –
sí, eso es lo que quería y la respuesta siguiente funciona bien – San