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