我有一个关于使用LINQ访问数据库并尝试使用它访问LIKE
比较运算符的版本的问题。
我知道LINQ有.Contains()
,.StartsWith()
和.EndsWith()
作为比较方法。但是我想知道是否有一种方法可以在不明确使用这些查询运算符的情况下以编程方式将SQL通配符嵌入到LINQ语句中。让我解释一下我的情况。
我正在编写一个访问数据库的程序,该程序的一部分是一个搜索窗口,用户可以使用它来帮助他们找到特定的数据库数据。我想尝试并将SQL通配符合并到这些搜索页面的文本框字段中。
例如,如果用户输入输入17%
,我希望程序检查该特定列中以17
开头的任何内容。 %17
和17
也是如此,我希望它能够搜索以...结尾的列,并包含值。
目前,这是我搜索方法的代码:
Public Function Data_Search(sData As List(Of String), DB As CustomDataContext) As DataGridView
Dim gridData As New DataGridView
Dim query = From p In DB.Parts
Select p.Part_Number, p.Part_Description, p.Supplier.Supplier_Name
for i = 0 To sData.Count - 1
If Not sData(i).ToString() = "" Then
Select Case i
Case 0
Dim partNum As String = sData(i).ToString()
query = query.Where(Function(x) x.Part_Number.Contains(partNum))
Case 1
Dim description As String = sData(i).ToString()
query = query.Where(Function(x) x.Part_Description.Contains(description))
Case 2
Dim supp As String = sData(i).ToString()
query = query.Where(Function(x) x.Supplier_Name.Contains(supp))
End Select
End If
Next
gridData.DataSource = query.ToList()
Return gridData
End Function
所以现在我正试图看看是否有办法让我修改代码的方式基本上不涉及我将子字符串搜索放入每个Case
部分以确定我是否应该使用StartsWith()
,Contains()
或EndsWith
。
感谢您的时间。
答案 0 :(得分:1)
如果您使用的是LINQ to SQL,并且正在与Microsoft SQL Server通信,那么您可以使用SQLMethods.Like
来实现SQL LIKE
:
query = query.Where(Function(x) SQLMethods.Like(x.Part_Number, partNum))