gpt4 book ai didi

c# - LINQ to Entities 搜索多个关键字的文本属性

转载 作者:太空狗 更新时间:2023-10-29 20:02:22 29 4
gpt4 key购买 nike

对于我正在做的网站,我们正在使用 LINQ to Entities。我负责为站点添加搜索功能。我试图找出在数据库中的单个字段上搜索多个关键字(用户输入)的最优雅的方法。请允许我举个例子。

表格列:

Name, Description

示例行:

"Cookie monster", "Fluffy, likes cookies and blue"

用户搜索(分隔符无关紧要):

"blue fluffy" 

目前我使用的是:

    public List<SesameCharacters> SearchByKeywords(string keywords)
{
List<SesameCharacters> output = new List<SesameCharacters>();
string[] k = keywords.ToLower().Split(' ');
using (SesameStreet_Entities entities = new SesameStreet_Entities())
{
IQueryable<SesameCharacters> filter = entities.SesameCharacters;

foreach (string keyword in k)
filter = ForceFilter(filter, keyword);

output = filter.ToList();
}
return output;
}

private IQueryable<SesameCharacters> ForceFilter(IQueryable<SesameCharacters> filter, string keyword)
{
return filter.Where(p => p.Description.ToLower().Contains(keyword));
}

这目前按预期工作,但我想这不是解决问题的最佳方法。我是否漏掉了一些明显的东西?

注意:这是 AND 匹配。

最佳答案

我发现这对我有用 - 这是将 VB.Net 与 Entity Framework 4.0 结合使用,但我确信原理是正确的。

这个执行“OR”风格的查询:

    Function Search(ByVal query As String) As IQueryable(Of Product)
Dim queryWords As String() = query.Split()
Dim entities As New Entities()

Return entities.Products.Where(Function(p) queryWords.Any(Function(w) p.Description.Contains(w)))
End Function

这个执行“AND”样式的查询:

Function Search(ByVal query As String) As IQueryable(Of product)
Dim queryWords As String() = query.Split()
Dim entities As New Entities()

Return entities.Products.Where(Function(p) queryWords.All(Function(w) p.Description.Contains(w)))
End Function

关于c# - LINQ to Entities 搜索多个关键字的文本属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/559735/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com