c# - 使用 .Contains 的搜索功能包含一个字段中的术语

标签 c# linq entity-framework search

我为一个产品站点构建了一个搜索功能。搜索工作正常。最近,我们在数据库中添加了一个 SearchTerm 字段。 SearchTerm 数据示例:“work shoes blue black gear” 当前代码是

    pM = (from p in ctx.Products
                      where
                            p.productSearchField.Contains(term) ||
                            p.productName.Contains(term)
                      select p).ToList()

如果 term = "shoes"<-- 有效

如果 term = "work shoes"<-- works

如果术语 = "black shoes"<-- 不起作用。

我还尝试用逗号分隔 SearchTerm 数据,但没有用。 有什么建议吗?

最佳答案

将术语拆分为单个术语。查看是否有任何匹配:

term.Split(' ').Any(i => p.productSearchField.Contains(i))

或者如果每个单词都必须匹配:

term.Split(' ').All(i => p.productSearchField.Contains(i))


编辑

             var terms = term.Split(' ');
             pM = (from p in ctx.Products
                  where
                        terms.All(i => p.productSearchField.Contains(i)) ||
                        p.productName.Contains(term)
                  select p).ToList()

关于c# - 使用 .Contains 的搜索功能包含一个字段中的术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8450887/

相关文章:

c# - 更新实体

c# - Fluent API 中具有常量的外键

C# WebApi 查询参数解析

c# - 有什么字典可以处理欺骗吗?

c# - 使用 WPF 中文本框的 KeyDown 事件捕获 Ctrl-X

linq - 使用 Linq 对 Person 对象列表进行排序

c# - 涉及 List<T> 和对象转换的棘手问题

c# - 获取声明为动态的对象的类型

c# - Linq 表达式 : Perform Distinct on a list dynamic property

c# - 第二次在 System.Data.Entity.Database 上调用 ExecuteSqlCommand 时出错