Как запрос Linq извлекает данные из нескольких таблиц без использования объединения - PullRequest
0 голосов
/ 13 июня 2019

У меня есть 3 таблицы в моей базе данных, которые не имеют никакого отношения друг к другу.что я хочу, чтобы реализовать операцию поиска на моем сайте.Чтобы при отправке слова в поле поиска запрос проходил по всем таблицам и извлекал данные, где бы оно ни находилось.Я могу получить данные из одной таблицы.

    public ActionResult Searchresult(string searchString)
    {
        var article = (from c in db.Tbl_Article select c );
        article = article.Where(s => s.Article_Title.Contains(searchString));

        var blog = (from c in db.Tbl_Blog select c );
        blog = blog.Where(s => s.Blog_Title.Contains(searchString));

        var history = (from c in db.Tbl_History select c);
        history = history.Where(s => s.Title.Contains(searchString));

        var result = article.Select(x => x.Article_Title).Union(blog.Select(x => x.Blog_Title)).Union(history.Select(x => x.Title)).ToList();

    //  ViewBag.result = result.ToString();

        return View(result);
    }

Пожалуйста, не смущайтесь тем, что я возвращаю в методе действия, это очень длинный и ненужный код для этого вопроса.

ИспользуяПо этому коду я успешно получаю результаты поиска из одной таблицы.Теперь я хочу такой же результат от всех таблиц, присутствующих в базе данных.вот где я застрял.Я искал так много статей для этого, но не нашел ни одного решения, которое было последним, когда я сам об этом спрашивал.

Спасибо

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Это может сработать

   Public ActionResult Index(string searchString)
    {
     var query1 = (from c in db.TableArticle select c);
       if (!String.IsNullOrEmpty(searchString))
         {
    query1 = query1.Where(s => 
            s.Article_Title.Contains(searchString)
    || s.Article_Description.Contains(searchString) || 
             s.Written_By.Contains(searchString) || 
             s.Organisation.Contains(searchString)
   ||s.Source.Contains(searchString));
            }
    var query2 = (.......);
    var query3 = (.......);

    var finalResult = query1.Select(x => x.columnName).Union(query2.Select(x => x.columnName)).Union(query3.Select(x => x.columnName));
    // OR
    var finalResult = query1.Select(x => x.columnName).Concat(query2.Select(x => x.columnName)).Concat(query3.Select(x => x.columnName));
    }
0 голосов
/ 14 июня 2019

Я только что реализовал и проверил в своем локальном том же запросе, и он работает нормально. Данный ответ правильный @Khairul Alam,

Я только что оптимизировал код и запустил то же самое в своем локальномего нормально работает

var searchString = "School";
        if (!String.IsNullOrEmpty(searchString))
        {
            var query1 = _context.Jobs.Where(s =>
                     s.JobTitle.Contains(searchString)
             || s.LocationDescription.Contains(searchString));

            var query2 = _context.Recruiters.Where(s =>
                    s.RecruiterName.Contains(searchString));

            var query3 = _context.Sectors.Where(s =>
                    s.SectorName.Contains(searchString));
            try
            {
                var finalResult = query1.Select(x => x.JobTitle).Union(query2.Select(x => x.RecruiterName)).Union(query3.Select(x => x.SectorName)).ToList();
            }
            catch (Exception)
            {
                throw;
            }

содержит изображение с выводом конечного результата

Click here for Final output

Если проблема все еще возникает, пожалуйста, поделитесь некоторымикод или где именно вы получаете сообщение об ошибке, чтобы мы могли их исправить

надеюсь, это будет полезно для вас

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...