搜索MVC搜索结果

时间:2019-08-06 13:58:28

标签: c# html asp.net-mvc

我有一个MVC站点,该站点连接到具有多个表的数据库。有些表只有1000条左右的记录,因此搜索这些表非常简单。但是,其中一个表有超过200万条记录,我尝试实现相同的搜索方法,但速度太慢。对于记录较少的表,搜索将遍历每一列以查找匹配项,但是具有一百万条记录的表只能以一种有效的方式搜索一列。本质上,我要解决此问题的方法是允许用户搜索搜索结果。因此,如果我要在具有100万条记录的表中按Apple进行搜索,则可以说保留了100,000条记录。然后,我可以通过Gala在剩余的100,000条记录中进行搜索,以进一步缩小搜索范围。这可能吗?还是有更好的方法来搜索我没有想到的许多记录?

控制器

public ViewResult Index(string sortOrder, string currentFilter, string search, int? page, int? pageSize)
        {
            int pageIndex = 1;
        pageIndex = page.HasValue? Convert.ToInt32(page) : 1;

            int defaSize = (pageSize ?? 25);
        ViewBag.psize = defaSize;

            ViewBag.PageSize = new List<SelectListItem>()
            {
                new SelectListItem() { Value = "25",Text = "25"},
                new SelectListItem() { Value = "50",Text = "50"},
                new SelectListItem() { Value = "100",Text = "100"},
                new SelectListItem() { Value = "1000",Text = "1000"},
            };


    ViewData["ControllerName"] = this.ToString();

    ViewBag.CurrentSort = sortOrder;

    ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "pkDeviceUnderTest" : "";
            if (search == null)
            {
        ViewBag.TotalCount = dbModel.DeviceUnderTests.Count();



    }
            else
            {
        var ld = dbModel.DeviceUnderTests.Where(x => x.nkDeviceUnderTest.Contains(search)||x.nkNotes.Contains(search)||x.FaultApplication.nkFaultApplication.Contains(search)||x.Firmware.nkFirmware.Contains(search)
        ||x.Hardware.nkHardware.Contains(search)||x.Location.nkLocation.Contains(search)||x.Power.nkPower.Contains(search)||x.nkHandleRating.ToString().Contains(search)||x.nkPreEventTime.ToString().Contains(search)).ToList()

         .Count();

        ViewBag.TotalCount = ld;
    }

    ViewBag.cf = currentFilter;
    ViewBag.search = search;
            Session["searchcircuit"] = search;
    ViewBag.defaSize = defaSize;
    var div = ViewBag.TotalCount / defaSize;
    ViewBag.numofPages = ((ViewBag.defaSize - 1) + ViewBag.TotalCount) / ViewBag.defaSize;
    ViewBag.index = pageIndex;

            int pagenum = pageIndex;
    var records = dbModel.DeviceUnderTests.Where(x => x.nkDeviceUnderTest.Contains(search) || x.nkNotes.Contains(search) || x.FaultApplication.nkFaultApplication.Contains(search) || x.Firmware.nkFirmware.Contains(search)
        || x.Hardware.nkHardware.Contains(search) || x.Location.nkLocation.Contains(search) || x.Power.nkPower.Contains(search) || x.nkHandleRating.ToString().Contains(search) ||search==null|| x.nkPreEventTime.ToString().Contains(search)).OrderBy(x => x.pkDeviceUnderTest).Skip(defaSize * (pagenum - 1)).Take(defaSize);
    var result = new StaticPagedList<DeviceUnderTest>(records, pageIndex, defaSize, ViewBag.TotalCount);
            return View(result);
}

查看

 @using (Html.BeginForm("Index", "Circuit", FormMethod.Get))
                {
                    <input type="text" name="search" placeholder="Search ... " />
                    <input type="submit" name="submit" value="Search" class="btn btn-default" style="background-color:#337ab7;color:azure" />


                }

0 个答案:

没有答案