tengo una clase de la siguiente manera:Simplemente no entender cómo usar LINQ
Class Scan
Delivered As Boolean
ScanDate As Date
State As String
Facility As String
End Class
continuación, se crea una lista y rellenarlo con las exploraciones que contiene lo que sea.
Dim Scans As New List(Of Scan)
Necesito extraer la lista para obtener varias informaciones. Me gustaría usar LINQ para hacerlo. El problema es que, por mi vida, simplemente no lo entiendo. La sintaxis me decepciona, el hecho de que los resultados no estén fuertemente tipados me saca de quicio, y la muestra en la web se simplifica demasiado o se complica demasiado.
¿Cómo podría
- Obtener un recuento de las exploraciones, agrupados por fecha donde Entregado = True
- obtener el número de exploraciones, agrupados por instalación donde Entregado = True
- obtener el número de exploraciones , agrupados por estado donde se entrega = verdadero
Luego quiero usar esto en un bucle For Each.
For Each result In GroupedResults
‘My Code
Next
Idealmente, me gustaría que el resultado sea muy tipado. es posible?
¿Alguien puede recomendar algunos enlaces para comenzar con esto? Cada sitio web con el que me encuentro me hace nadar. No lo estoy entendiendo en absoluto.
EDIT:
Muchas gracias chicos. Todavía estoy rascándome la cabeza con estas cosas, pero al menos este es un ejemplo del mundo real que puedo usar para tener una idea de lo que está sucediendo.
Tenía la esperanza de que este simple ejemplo me ayudara a utilizar el tablero en un uso más complejo, sin suerte todavía. Debería haber preguntado esto de la nada.
Todos los ejemplos parecen utilizar una respuesta de clave/valor. ¿Qué pasa si tengo dos valores que necesito agrupar?
Class Scan
Delivered As Boolean
Scanned As Boolean
ScanDate As Date
State As String
Facility As String
End Class
1. Get a count of Delivered = True, a count of Scanned=True, grouped by Date
2. Get a count of Delivered = True, a count of Scanned=True, grouped by Facility
3. Get a count of Delivered = True, a count of Scanned=True, grouped by State
¿Es posible obtener esto en un resultado?
Editar Editar:
respondido a mi propia edición! Esto parece estar funcionando para mí:
Dim query = From r In scans _
Group r By r.ScanDate Into g = Group _
Select New With _
{g, .DeliveredCount = g.Count(Function(s) s.Delivered), .ScannedCount = g.Count(Function(s) s.Scanned)}
Muchas gracias chicos. Me has llevado al punto donde podría hackear una solución. Todavía no "entiendo" lo que estoy haciendo (¿Qué es Function (s) ?!), pero tengo algo para empezar. Tengo la intención de pasar el tiempo aprendiendo esto ahora. Creo que lo que realmente me sorprendió es que las muestras en la red son C#. Normalmente no tengo problemas para convertir la sintaxis, pero con LINQ esto no es tan simple. Pensé que estaba haciendo algo mal, pero era solo que la sintaxis era muy diferente.
¿Quiere contar por separado para cada fecha de entrega? Entonces, sus resultados serían: 3 fueron entregados el día X, 6 fueron entregados el día Y ... etc. ¿Es esto lo que está buscando? –
¿Qué te hace pensar que los resultados no están fuertemente tipados? –
Están fuertemente tipados. Si solo ejecuta una consulta simple (de s como Selección de escaneo), no se lanzará como un escaneo, pero puede usar rápidamente CType para hacerlo. –