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"


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow