首页 > 解决方案 > Linq 查询如何在不使用连接的情况下从多个表中获取数据

问题描述

我的数据库中有 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);
    }

请不要混淆我在操作方法中返回的内容,对于该问题,它是一个非常长且不必要的代码。

通过使用此代码,我成功地从一个表中获取了搜索结果。现在我想从数据库中存在的所有表中得到相同的结果。这就是我卡住的地方。我为此搜索了很多文章,但没有找到任何解决方案,这是我自己最后一次提出的问题。

谢谢

标签: c#sql-serverasp.net-mvc

解决方案


这可能有效

   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));
    }

推荐阅读