实体框架搜索多个单词

时间:2019-07-08 18:57:56

标签: c# entity-framework asp.net-core entity-framework-6

我想使用Entity Framework(EF6)创建搜索查询。为了更好地理解,我将举例说明。

我有5个字(字符串)。

  1. “我叫杰克”

  2. “我的年龄是35岁”

  3. “我的工作正在发展”

  4. “你叫什么名字”

  5. “中国人口超过10亿”

现在,我想创建一个具有以下结果的EF查询搜索:

  • 搜索为My name时,结果为数字1和2以及3和4
  • 搜索为is时,结果为数字1和2以及3和4和5

这是我的查询

var query = (from q1 in _db.QuestionTbl where q1.questionTitle.Any(a => q1.questionTitle.Contains("search")) select q1).ToList();

但是我找不到正确的答案。

2 个答案:

答案 0 :(得分:5)

@jonaChaz的答案有效,但在一种重要方式上效率低下:它将为搜索中的每个术语生成1次SQL往返查询。如果您改用这种方式编写代码,则EntityFramework会将其编译为一个查询/服务器双向访问,并且可以节省大量开销,尤其是对于长期搜索而言:

    string search = "My name";
    var terms = search.Split(' ');
    var results = _db.QuestionTb1
        .Where(q => terms.Any(term => q.questionTitle.Contains(term)))
        .ToList();

答案 1 :(得分:2)

    string search = "My is";
    var arr = search.Split(' ');

    List<QuestionTb1> query = new List<QuestionTb1>();
    foreach (var word in arr)
    {
        var newQuestionTb1s = _db.QuestionTb1.Where(a => a.questionTitle.Contains(word)).Except(query).ToList();
        query.AddRange(newQuestionTb1s);
    }

此代码按“单词”(空格)分割搜索文本,然后逐字获取搜索文本中的问题。