Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ(自定义筛选器查询)中的完整搜索测试_Linq_Tdd_Full Text Search - Fatal编程技术网

LINQ(自定义筛选器查询)中的完整搜索测试

LINQ(自定义筛选器查询)中的完整搜索测试,linq,tdd,full-text-search,Linq,Tdd,Full Text Search,我有一张桌子,上面有一张餐馆名称列表,还有一张桌子的链接,上面有另一种烹饪类型 我想在我的网页上提供一个搜索框,在键入时,在数据库中搜索每个单词并返回结果。我一直在寻找一个解决方案,它不涉及设置sql全文搜索,因为我希望能够使用LINQtoSQL测试这一点 根据我以前的代码,我有一个函数,该函数在给定输入文本的情况下创建一个查询过滤器,并根据该过滤器返回所有结果 Private Function SetupQuery(ByVal searchText As String) As String

我有一张桌子,上面有一张餐馆名称列表,还有一张桌子的链接,上面有另一种烹饪类型

我想在我的网页上提供一个搜索框,在键入时,在数据库中搜索每个单词并返回结果。我一直在寻找一个解决方案,它不涉及设置sql全文搜索,因为我希望能够使用LINQtoSQL测试这一点

根据我以前的代码,我有一个函数,该函数在给定输入文本的情况下创建一个查询过滤器,并根据该过滤器返回所有结果

Private Function SetupQuery(ByVal searchText As String) As String
    Dim searchFields As New List(Of String)

    searchFields.Add("Name")
    searchFields.Add("Postcode")
    searchFields.Add("Cuisine")

    Dim firstCol As Boolean = True

    Dim a() As String
    Dim j As Integer
    a = searchText.Trim.Split(" ")

    Dim filter As String = ""

    Dim compareString As String
    For Each col As String In searchFields
        For j = 0 To a.GetUpperBound(0)
            compareString = a(j).ToUpper()
            compareString = compareString.Trim()

            If firstCol Then
                filter = filter & col & " LIKE '" & compareString & "%' "
                firstCol = False
            Else
                filter = filter & " or " & col & " LIKE '" & compareString & "%' "
            End If
        Next
    Next

    Return filter
End Function
这将对搜索字段进行硬编码,然后循环搜索文本中的每个字段和每个单词,以构造一个或类似的过滤器

我确信我可以在我的LINQ代码中使用它,但这似乎不是一个优雅的解决方案,特别是因为列是硬编码的,而不是LINQ如何使用它们

有谁能推荐一个更好的方法来做这件事,或者在这件事上有什么建议吗


谢谢

我不知道这将如何影响您的测试,但LinqtoSQL可以通过一些微调与全文索引一起工作:


这可能不是最好的方法,但如果您总是将搜索文本作为字符串拆分为三个数组,则可以尝试使用以下方法:

from t in temp
where t.Name == a(0)
|| t.Postcode == a(1)
|| t.Cuisine == a(2)
select t

我通常使用C#,所以VB中的任何东西都会让人害怕,但我认为LINQ语法应该类似

您可以使用全文搜索,但仍然可以使用LINQ to SQL。您可以创建一个存储过程并让LINQ调用它。除了查找精确匹配外,您还可以返回:

  • 简单搜索特定的单词或短语
  • 同义词词典搜索——在IE上搜索可能会返回对Internet Explorer和IE的点击(基于词典的扩展搜索);对孟买的搜索也可能返回对孟买的点击(基于同义词的替换搜索)
  • 搜索将返回一个词的所有不同语言形式(称为代词),在bank上搜索将返回对banking、banked、banks、banks’s和bank’s等的点击(搜索词bank的所有变位和/或变位)
  • 不区分重音的搜索——在café上的搜索将返回对cafe和café的点击