将LIN通配符与LINQ

时间:2018-05-31 18:09:11

标签: sql vb.net linq wildcard

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

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

我正在编写一个访问数据库的程序,该程序的一部分是一个搜索窗口,用户可以使用它来帮助他们找到特定的数据库数据。我想尝试并将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

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

如果您使用的是LINQ to SQL,并且正在与Microsoft SQL Server通信,那么您可以使用SQLMethods.Like来实现SQL LIKE

query = query.Where(Function(x) SQLMethods.Like(x.Part_Number, partNum))