Visual Basic .NET Language
LINQ
Поиск…
Вступление
LINQ (Language Integrated Query) - это выражение, которое извлекает данные из источника данных. LINQ упрощает эту ситуацию, предлагая согласованную модель для работы с данными в различных источниках и форматах данных. В запросе LINQ вы всегда работаете с объектами. Вы используете одни и те же базовые шаблоны кодирования для запроса и преобразования данных в документы XML, базы данных SQL, наборы данных ADO.NET, коллекции .NET и любой другой формат, для которого доступен поставщик LINQ.
проекция
' 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)
Мы можем проецировать сразу несколько результатов
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})
Выбор из массива с простым условием
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"
Запрос будет перечислимым объектом, содержащим Stack Overflow
и Super User
. x
в запросе - итерационная переменная, в которой будут храниться каждый объект, проверенный предложением Where
.
Отображение массива с помощью предложения 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
Результатом запроса будет перечисляемый объект, содержащий длины строк во входном массиве. В этом примере это будут значения 14, 10, 10, 24. x в запросе - итерационная переменная, где будут храниться каждый объект из входного массива.
Вывод заказа
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"
Предложение OrderBy заказывает вывод по значению, возвращенному из предложения. В этом примере это длина каждой строки. Порядок вывода по умолчанию возрастает. Если вам нужно спуститься, вы можете указать « Descending
ключевое слово после предложения».
Dim query = From x In sites
Order By x.Length Descending
Создание словаря из 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
Получение различных значений (с использованием метода 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"