Visual Basic .NET Language
LINQ
Buscar..
Introducción
LINQ (Language Integrated Query) es una expresión que recupera datos de un origen de datos. LINQ simplifica esta situación al ofrecer un modelo consistente para trabajar con datos a través de varios tipos de fuentes de datos y formatos. En una consulta LINQ, siempre está trabajando con objetos. Utiliza los mismos patrones de codificación básicos para consultar y transformar datos en documentos XML, bases de datos SQL, conjuntos de datos ADO.NET, colecciones .NET y cualquier otro formato para el que esté disponible un proveedor LINQ.
Proyección
' sample data
Dim sample = {1, 2, 3, 4, 5}
' using "query syntax"
Dim squares = From number In sample Select number * number
' same thing using "method syntax"
Dim squares = sample.Select (Function (number) number * number)
Podemos proyectar múltiples resultados a la vez también
Dim numbersAndSquares =
From number In sample Select number, square = number * number
Dim numbersAndSquares =
sample.Select (Function (number) New With {Key number, Key .square = number * number})
Seleccionando de matriz con condición simple
Dim sites() As String = {"Stack Overflow", "Super User", "Ask Ubuntu", "Hardware Recommendations"}
Dim query = From x In sites Where x.StartsWith("S")
' result = "Stack Overflow", "Super User"
La consulta será un objeto enumerable que contiene Stack Overflow
y Super User
. x
en la consulta es una variable iterativa donde se almacenará cada objeto verificado por la cláusula Where
.
Mapeo de matriz por cláusula de selección
Dim sites() As String = {"Stack Overflow",
"Super User",
"Ask Ubuntu",
"Hardware Recommendations"}
Dim query = From x In sites Select x.Length
' result = 14, 10, 10, 24
El resultado de la consulta será un objeto enumerable que contiene longitudes de cadenas en la matriz de entrada. En este ejemplo, estos serían los valores 14, 10, 10, 24. x en la consulta es una variable iterativa donde se almacenará cada objeto de la matriz de entrada.
Orden de salida
Dim sites() As String = {"Stack Overflow",
"Super User",
"Ask Ubuntu",
"Hardware Recommendations"}
Dim query = From x In sites
Order By x.Length
' result = "Super User", "Ask Ubuntu", "Stack Overflow", "Hardware Recommendations"
La cláusula OrderBy ordena la salida por el valor devuelto por la cláusula. En este ejemplo es la longitud de cada cadena. El orden de salida predeterminado es ascendente. Si necesita descender puede especificar una palabra clave Descending
después de la cláusula.
Dim query = From x In sites
Order By x.Length Descending
Generando diccionario desde IEnumerable
' Just setting up the example
Public Class A
Public Property ID as integer
Public Property Name as string
Public Property OtherValue as Object
End Class
Public Sub Example()
'Setup the list of items
Dim originalList As New List(Of A)
originalList.Add(New A() With {.ID = 1, .Name = "Item 1", .OtherValue = "Item 1 Value"})
originalList.Add(New A() With {.ID = 2, .Name = "Item 2", .OtherValue = "Item 2 Value"})
originalList.Add(New A() With {.ID = 3, .Name = "Item 3", .OtherValue = "Item 3 Value"})
'Convert the list to a dictionary based on the ID
Dim dict As Dictionary(Of Integer, A) = originalList.ToDictionary(function(c) c.ID, function(c) c)
'Access Values From The Dictionary
console.Write(dict(1).Name) ' Prints "Item 1"
console.Write(dict(1).OtherValue) ' Prints "Item 1 Value"
End Sub
Obtención de valores distintos (utilizando el método Distinct)
Dim duplicateFruits = New List(Of String) From {"Grape", "Apple", "Grape", "Apple", "Grape"}
'At this point, duplicateFruits.Length = 5
Dim uniqueFruits = duplicateFruits.Distinct();
'Now, uniqueFruits.Count() = 2
'If iterated over at this point, it will contain 1 each of "Grape" and "Apple"