【问题标题】:Using SQL Wildcards with LINQ在 LINQ 中使用 SQL 通配符
【发布时间】:2018-11-10 19:46:58
【问题描述】:

我有一个关于使用 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 部分以确定我是否应该使用 @ 987654332@、Contains()EndsWith

感谢您的宝贵时间。

【问题讨论】:

  • 也许 LinqKit 可以提供帮助? albahari.com/nutshell/linqkit.aspx
  • @Tim 我在 VB.Net 中编程,看起来 LinqKit 是一个 C# 扩展。
  • .NET 语言是兼容的——如果它有你需要的东西,你可以将它加载到你的项目中并翻译示例。我不得不在不同语言之间来回做类似的事情。
  • LINQ 太宽泛了,你用的是什么 ORM?
  • @IvanStoev SQLServer。对不起。

标签: sql vb.net linq wildcard


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多