Visual Basic .NET Language
LINQ
Szukaj…
Wprowadzenie
LINQ (Language Integrated Query) to wyrażenie, które pobiera dane ze źródła danych. LINQ upraszcza tę sytuację, oferując spójny model pracy z danymi w różnych źródłach i formatach danych. W zapytaniu LINQ zawsze pracujesz z obiektami. Korzystasz z tych samych podstawowych wzorców kodowania, aby wyszukiwać i przekształcać dane w dokumentach XML, bazach danych SQL, zestawach danych ADO.NET, kolekcjach .NET i dowolnym innym formacie, dla którego dostępny jest dostawca LINQ.
Występ
' 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)
Możemy również wyświetlić wiele wyników jednocześnie
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})
Wybór z tablicy z prostym warunkiem
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"
Zapytanie będzie obiektem wymiennym zawierającym Stack Overflow
i Super User
. x
w zapytaniu jest iterującą zmienną, w której będą przechowywane każdy obiekt sprawdzany przez klauzulę Where
.
Mapowanie tablicy według klauzuli Select
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
Wynikiem zapytania będzie obiekt policzalny zawierający długości ciągów w tablicy wejściowej. W tym przykładzie byłyby to wartości 14, 10, 10, 24. x w zapytaniu jest zmienną iteracyjną, w której będą przechowywane każdy obiekt z tablicy wejściowej.
Zamawianie wyników
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"
Klauzula OrderBy porządkuje dane wyjściowe według wartości zwróconej z klauzuli. W tym przykładzie jest to długość każdego łańcucha. Domyślna kolejność wyjściowa jest rosnąca. Jeśli potrzebujesz malejąco, możesz podać słowo kluczowe Descending
po klauzuli.
Dim query = From x In sites
Order By x.Length Descending
Generowanie słownika z 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
Uzyskiwanie odrębnych wartości (przy użyciu metody 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"