簡體   English   中英

在LINQ中使用SQL通配符

[英]Using SQL Wildcards with LINQ

我對使用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

謝謝你的時間。

如果您正在使用LINQ to SQL,並且正在與Microsoft SQL Server通訊,則可以使用SQLMethods.Like來實現SQL LIKE

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM