Кажется, что самый простой способ решить вашу реальную проблему - это изменить привязку 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
в вашем скрипте.
Я полагаю, что именно так вы и сделаете в VB (я разработчик на C #):
query = query.where(Function(s) s = "ABC")
См. LINQ - Примеры запросов для некоторых примеров.
Я думаю, что сложная часть здесь - это неизвестное количество параметров запроса. Вы можете использовать базовый 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 () в конце, чтобы выполнить запрос.
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
Если вы делаете это в цикле, вы можете сделать что-то вроде этого:
.Where(Function(i as mytype) i.myfiltervar = WhatIWantToSelect)
В 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.
Этот метод является аддитивным, т.е.