1

我正在尝试获取我编写的 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;

那到底是做什么的?

4

1 回答 1

1

你可以这样做:

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

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

  1. 这是MSDN:LINQ(语言集成查询)

  2. 这是 Scott Gu 中我最喜欢的一篇Using LINQ with ASP.NET(第 1 部分)

  3. 这是另一个:LINQ to Entities: Basic Concepts and Features

编辑您的方法可能看起来像这样(只是一个例子):

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

希望能帮助到你!

于 2013-10-16T23:03:27.947 回答