首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >逐字使用实体框架的动态搜索

逐字使用实体框架的动态搜索
EN

Stack Overflow用户
提问于 2019-02-18 12:04:56
回答 2查看 55关注 0票数 0

我是实体框架的新手。我需要在存储在数据库中的文本中搜索“johnny”这个词。文本来自pdf文件。因此,在文本列中有很多单词。

以下是我的代码

代码语言:javascript
运行
复制
using (var d = new DatabaseContext())
{
    var l = d.Pages.Where(x => x.Text.ToLower().Contains(text.ToLower())).ToList();
}

到目前为止,代码运行正常。

但需求发生了变化。如果用户键入jhonny bravo,程序将不得不在Text列中搜索单词jhonnybravo。应该可以找到jhonnybravo,即使Text列中的单词是:

代码语言:javascript
运行
复制
Jhonny is bravo
jhonny is not bravo

我该如何解决这个问题呢?

我想出了拆分文本并搜索每个单词的想法

代码语言:javascript
运行
复制
using (var d = new DatabaseContext())
{
    var split = Regex.Split(text, @"\s+");

    if (split.Count() > 1)
    {
        var l = d.Pages.Where(x => x.Text.ToLower().Contains(text.ToLower())).ToList();
    }
}

但是使用上面的代码。如何创建动态搜索?如果搜索词包含6个单词怎么办?我该如何进行查询?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-18 13:32:19

您可以从word条件创建Where链:

代码语言:javascript
运行
复制
using (var db = new DatabaseContext())
{
    var words = Regex.Split(text, @"\s+");
    var query = db.Pages.AsQuerable();
    foreach(var word in words)
        query = query.Where(x => x.Text.ToLower().Contains(word.ToLower()));
    var answer = query.ToList();
}
票数 1
EN

Stack Overflow用户

发布于 2019-02-18 12:53:35

在这里,我将文本拆分成空格,然后我们得到文本中每个单词的列表。

我还使用Distinct()方法删除所有重复的单词,我不确定是否有任何性能提升,但如果你不喜欢它,你可以删除它。

代码语言:javascript
运行
复制
var keywords = ["john", "bravo", "hello"]
var l = d.Pages
         .Where(page => { 
                 var words = page.Text.ToLower().Split(' '). Distinct();

                 foreach(var keyword in keywords) {
                     if (!words.Contains(keyword.ToLower())
                        return false;
                 }

                 return true;
             }
         )
         .ToList();

// "john," "johnnxx" will also count as true
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54740334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档