Asp.net 使用LINQ vb搜索多个关键字

Asp.net 使用LINQ vb搜索多个关键字,asp.net,database,vb.net,linq,dynamic-queries,Asp.net,Database,Vb.net,Linq,Dynamic Queries,我有一些现有的代码需要修改以搜索多个关键字。顺便说一句,我对这一切都不熟悉 Dim topics As IQueryable(Of Global.Platform.Core.Data.Topic) = _ From t In _db.Topics Where t.IsActive = True And t.TopicTitle.Contains(criteria) And t.ForumID = 0 And Not t.TopicTit

我有一些现有的代码需要修改以搜索多个关键字。顺便说一句,我对这一切都不熟悉

Dim topics As IQueryable(Of Global.Platform.Core.Data.Topic) = _
               From t In _db.Topics
               Where t.IsActive = True And t.TopicTitle.Contains(criteria) And t.ForumID = 0 And Not t.TopicTitle.Contains("default") And t.Member.IsActive = True And t.IsActive = True
               Order By t.DateCreated Descending
               Select t
               Take (take_x)
Return topics
我将如何改变这一点,以便如果我输入猫毛标准,它将执行或搜索。所以…t.TopicTitle.Containscat或t.TopicTitle.Containshair。。。。 当然,它需要是动态的

我试过了,但没能成功

Dim criteriaArr As Array = criteria.Split(" ")
            Dim new_criteria As String = " t.TopicTitle.Contains(" + criteriaArr(0) + ")"
            If criteriaArr.Length > 1 Then
                For Each item As String In criteriaArr
                    new_criteria += " Or t.TopicTitle.Contains(" + item + ")"
                Next
            End If

这样做的目的是分割空格,并继续附加到where子句。我知道在SQL中这可能会起作用,但在这种情况下我该怎么办?

您可以使用.Any和.Contains的组合:

这是获取查询词的字符串列表,并检查TopicTitle是否包含任何查询词


抱歉,这是C语言,但是您可以看到如何在.Where中执行lamda表达式。只需向执行查询的方法发送一个列表,就可以了。

假设TopicTitle和条件是空格分隔的字符串,我会将两个集合相交,并检查是否有匹配项

        Dim topics As IQueryable(Of Global.Platform.Core.Data.Topic) = _
           From t In _db.Topics
           Where t.IsActive = True And t.TopicTitle.Intersect(criteria).Any()
                And t.ForumID = 0 And Not t.TopicTitle.Contains("default") 
                And t.Member.IsActive = True And t.IsActive = True
           Order By t.DateCreated Descending
           Select t
           Take (take_x)
        Return topics

谢谢,但正如我说的,我对这一切都不熟悉。我需要在vb语法的东西。这些方法使用相同的方式。Dim topics As IQueryableOf Global.Platform.Core.Data.Topic=u来自t In u db.topics Where strings.Anys=>t.TopicTitle.Containss选择t;类似的东西。使用此链接在VB和C之间进行翻译。
Dim strings = {"cat", "dog", "bill"}

Using context = New MyEntities()
    Dim matches = context.MyObject.Where(Function(x) strings.Any(Function(s) x.TopicTitle.Contains(s)))
End Using
        Dim topics As IQueryable(Of Global.Platform.Core.Data.Topic) = _
           From t In _db.Topics
           Where t.IsActive = True And t.TopicTitle.Intersect(criteria).Any()
                And t.ForumID = 0 And Not t.TopicTitle.Contains("default") 
                And t.Member.IsActive = True And t.IsActive = True
           Order By t.DateCreated Descending
           Select t
           Take (take_x)
        Return topics