Как я добавляю 'где' пункт с помощью VB.NET и LINQ?

Кажется, что самый простой способ решить вашу реальную проблему - это изменить привязку i3 на

bindsym --release $mod+Shift+t exec /usr/local/bin/myscript fromI3

и сделать

if [[ -n "$1" ]]; then
    echo "this was from a keybind"
else
    echo "this wasn't from a keybind"
fi

в вашем скрипте.

28
задан Peter Mortensen 19 October 2016 в 17:12
поделиться

5 ответов

Я полагаю, что именно так вы и сделаете в VB (я разработчик на C #):

query = query.where(Function(s) s = "ABC")

См. LINQ - Примеры запросов для некоторых примеров.

42
ответ дан 28 November 2019 в 03:03
поделиться

Я думаю, что сложная часть здесь - это неизвестное количество параметров запроса. Вы можете использовать базовый LINQ IQueryable (Of T) здесь, чтобы помочь.

Я думаю, что следующее будет работать (это не скомпилировано, просто код блокнота здесь):

Public Function GetDocuments(criteria as String)
    Dim splitCriteria = SplitTheCriteria(criteria)

    dim query = from document in _context.Documents

    For Each item in splitCriteria
        Dim localItem = item
        query = AddCriteriaToQuery(query, localItem)
    Next

    dim matchingDocuments = query.ToList()
End Function

Private Function AddCriteriaToQuery(query as IQueryable(Of Document), criteria as string) as IQueryable(Of Document)
     return query.Where(Function(doc) doc.Name = criteria)
End Function

Так как LINQ будет задерживать выполнение запроса, вы можете добавить где предложения на ваш запрос в цикле, а затем вызовите .ToList () в конце, чтобы выполнить запрос.

11
ответ дан 28 November 2019 в 03:03
поделиться
Dim query = From document In _context.Documents where document.name = 'xpto' select document 

Или

Dim query = From document In _context.Documents where document.name.contains('xpto') select document 
1
ответ дан 28 November 2019 в 03:03
поделиться

Если вы делаете это в цикле, вы можете сделать что-то вроде этого:

.Where(Function(i as mytype) i.myfiltervar = WhatIWantToSelect)
0
ответ дан 28 November 2019 в 03:03
поделиться

В LINQ to SQL вы можете добавлять предложения WHERE в свой запрос с помощью. Где метод объекта запроса, как вы отметили в своем вопросе. Чтобы использовать оператор LIKE, попробуйте использовать метод .Contains объекта, который вы запрашиваете, в лямбда-выражении вашего вызова метода Where.

Вот упрощенный пример в консольном приложении. Надеюсь, это приведет вас в правильном направлении.

Public Class Doc

    Private _docName As String
    Public Property DocName() As String
        Get
            Return _docName
        End Get
        Set(ByVal value As String)
            _docName = value
        End Set
    End Property

    Public Sub New(ByVal newDocName As String)
        _docName = newDocName
    End Sub
End Class

Sub Main()
    Dim Documents As New List(Of Doc)
    Documents.Add(New Doc("ABC"))
    Documents.Add(New Doc("DEF"))
    Documents.Add(New Doc("GHI"))
    Documents.Add(New Doc("ABC DEF"))
    Documents.Add(New Doc("DEF GHI"))
    Documents.Add(New Doc("GHI LMN"))

    Dim qry = From docs In Documents

    qry = qry.Where(Function(d) d.DocName.Contains("GHI"))

    Dim qryResults As List(Of Doc) = qry.ToList()

    For Each d As Doc In qryResults
        Console.WriteLine(d.DocName)
    Next

End Sub

Обратите внимание на вызов .Contains ("GHI") в лямбда-выражении метода .Where. Я имею в виду параметр выражения «d», который предоставляет свойство DocName, которое дополнительно предоставляет метод .Contains. Это должно привести к ожидаемому запросу LIKE.

Этот метод является аддитивным, т.е.

3
ответ дан 28 November 2019 в 03:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: