sug*_*rum 28 linq vb.net where-clause
我是VB.NET的新手,我在这里遇到一些麻烦,我觉得应该很简单.
保持简单,假设我有一个带有"Name"的Document表,我想搜索(实际上还有其他几个表,连接等等).我需要能够使用where基于传入的字符串值的子句构建查询.
示例 - 用户可以传入"ABC","ABC DEF","ABC DEF GHI".
最后的查询是(语法不正确,我知道):
Select * from Documents Where Name Like %ABC% AND Name Like %DEF% AND Name like %GHI%
Run Code Online (Sandbox Code Playgroud)
所以,我以为我可以这样做.
Dim query = From document In _context.Documents
<< loop based on number of strings passed in >>
query = query.Where( ... what goes here?? )
Run Code Online (Sandbox Code Playgroud)
出于某种原因,脑死亡或其他什么,我无法弄清楚如何在VB.NET中完成这项工作,或者我是否正确地做到了.
Jim*_*uts 42
我相信这就是你在VB中做的事情(我是C#开发人员):
query = query.where(Function(s) s = "ABC")
Run Code Online (Sandbox Code Playgroud)
有关示例,请参阅LINQ - 示例查询.
Jer*_*ebe 11
我认为这里棘手的部分是未知数量的查询参数.您可以在此处使用基础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
Run Code Online (Sandbox Code Playgroud)
由于LINQ将延迟执行查询,您可以在循环中将where子句附加到查询中,然后在末尾调用.ToList()来执行查询.
Dim query = From document In _context.Documents where document.name = 'xpto' select document
Run Code Online (Sandbox Code Playgroud)
或者
Dim query = From document In _context.Documents where document.name.contains('xpto') select document
Run Code Online (Sandbox Code Playgroud)