搜索字符串拉取多个查询时出现问题

本文关键字:问题 查询 字符串 搜索 | 更新日期: 2023-09-27 18:35:43

我正在尝试获取我编写的 SearchIndex 以根据某人输入的字符串查询多个数据库表。 数字搜索工作正常,但我无法弄清楚如何让它也搜索其他表。 这是在 MVC3 中完成的。

 public ActionResult SearchIndex(string searchString)
    {
        var number = from m in db.Numbers
            select m;
        if (!String.IsNullOrEmpty(searchString))
        {
            number = number.Where(s => s.Numbers.Contains(searchString));
        }
        var assignment = from m in db.Numbers
                         select m;
        if (!String.IsNullOrEmpty(searchString))
        {
            assignment = assignment.Where(s => s.Numbers.Contains(searchString));
        }
        return View(number);
    }

也作为侧节点

 select m;

这到底是做什么的?

搜索字符串拉取多个查询时出现问题

你可以这样做:

var mySearchResult = from m in db.MyOtherTables
                          where m.MyField.Contains(searchString)
                          select m;

要了解"m"在这里做什么,你需要了解Linq。有很多好的教程,你必须谷歌一下。

  1. 以下是 MSDN:LINQ(语言集成)查询)。

  2. 这是我最喜欢的 Scott Gu 将 LINQ 与 ASP.NET 一起使用(部分1)

  3. 这是另一个:LINQ to Entities:基本概念和特征。

编辑 您的方法可能如下所示(只是一个示例):

public ActionResult SearchIndex(string searchString, string tableName)
{
    if (!String.IsNullOrEmpty(searchString) && !String.IsNullOrEmpty(tableName))
    {
        switch (tableName.ToLower())
        {
            case "number":
                var numbers = from m in db.Numbers
                    where m.Number.Contains(searchString)
                    select m;
                //View "Number" should use strongly typed IEnumerable<Number>
                return View("Number", numbers);
            case "assignment":
                var assignments = from m in db.Assignments
                    where m.AssignmentName.Contains(searchString)
                    select m;
                //View "Assignment" should use strongly typed IEnumerable<Assignment>
                return View("Assignment", assignments);
            //Add cases for other each tables
            case "mytable":
                var mytables = from m in db.MyTables
                    where m.MyField.Contains(searchString)
                    select m;
                //View "MyView" should use strongly typed IEnumerable<MyView>
                return View("MyView", mytables);
            default:
                return RedirectToAction("Index");
        }
    }
    return RedirectToAction("Index");
}

希望对您有所帮助!