在 LINQ 中使用 SQL 通配符

Using SQL Wildcards with LINQ

我有一个关于使用 LINQ 访问数据库并尝试使用它访问 LIKE 比较运算符的版本的问题。

我知道 LINQ 有 .Contains().StartsWith().EndsWith() 作为比较方法。但是我想知道是否有一种方法可以在不显式使用这些查询运算符的情况下以编程方式将 SQL 通配符合并到 LINQ 语句中。让我解释一下我的情况。

我正在编写一个访问数据库的程序,该程序的一部分是搜索 window,用户可以使用它来帮助他们查找特定的数据库数据。我想 尝试 并将 SQL 通配符合并到这些搜索页面的文本框字段中。

例如,如果用户输入 17%,我希望程序检查特定列中以 17 开头的任何内容。 %1717 也是如此,我希望它搜索以结尾并包含值的列。

目前,这是我的搜索方法代码:

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))