Entity Framework поиск по нескольким словам - PullRequest
1 голос
/ 08 июля 2019

Я хочу создать поисковый запрос с Entity Framework (EF6). Чтобы лучше понять, я объясню на примере.

У меня есть 5 слов (строка).

  1. "Меня зовут Джек"

  2. "Мой возраст 35 лет"

  3. «Моя работа - разработчик»

  4. "как тебя зовут"

  5. "Население Китая превышает 1 миллиард"

Теперь я хочу создать поисковый запрос 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 ]

5 голосов
/ 08 июля 2019

@ Ответ 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();
2 голосов
/ 08 июля 2019
    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);
    }

этот код разбивает текст поиска по «словам» (пробелам), а затем получает вопросы с поиском текста слово за словом.

...