在 LINQ 中使用 SQL 通配符
Using SQL Wildcards with LINQ
我有一个关于使用 LINQ 访问数据库并尝试使用它访问 LIKE
比较运算符的版本的问题。
我知道 LINQ 有 .Contains()
、.StartsWith()
和 .EndsWith()
作为比较方法。但是我想知道是否有一种方法可以在不显式使用这些查询运算符的情况下以编程方式将 SQL 通配符合并到 LINQ 语句中。让我解释一下我的情况。
我正在编写一个访问数据库的程序,该程序的一部分是搜索 window,用户可以使用它来帮助他们查找特定的数据库数据。我想 尝试 并将 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
.
感谢您的宝贵时间。
如果您正在使用 LINQ to SQL,并且您正在与 Microsoft SQL 服务器通信,那么您可以使用 SQLMethods.Like
来实现 SQL LIKE
:
query = query.Where(Function(x) SQLMethods.Like(x.Part_Number, partNum))
我有一个关于使用 LINQ 访问数据库并尝试使用它访问 LIKE
比较运算符的版本的问题。
我知道 LINQ 有 .Contains()
、.StartsWith()
和 .EndsWith()
作为比较方法。但是我想知道是否有一种方法可以在不显式使用这些查询运算符的情况下以编程方式将 SQL 通配符合并到 LINQ 语句中。让我解释一下我的情况。
我正在编写一个访问数据库的程序,该程序的一部分是搜索 window,用户可以使用它来帮助他们查找特定的数据库数据。我想 尝试 并将 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
.
感谢您的宝贵时间。
如果您正在使用 LINQ to SQL,并且您正在与 Microsoft SQL 服务器通信,那么您可以使用 SQLMethods.Like
来实现 SQL LIKE
:
query = query.Where(Function(x) SQLMethods.Like(x.Part_Number, partNum))