Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何在内存中保存数据列表?_Asp.net Mvc - Fatal编程技术网

Asp.net mvc 如何在内存中保存数据列表?

Asp.net mvc 如何在内存中保存数据列表?,asp.net-mvc,Asp.net Mvc,我有一个ajax函数,由jQueryDataTable和ve调用 从数据库中获取数据 服务于搜索、排序、分页等功能性工作 现在我所需要的是,我只想获取一次数据并将其保存在内存中,这样当用户在搜索框中键入内容时,它就可以直接从存储的数据中执行搜索 这是代码 public ActionResult AjaxOil(JQueryDataTableParamModel param) { //To get data and should be run only onc

我有一个ajax函数,由jQueryDataTable和ve调用

  • 从数据库中获取数据
  • 服务于搜索、排序、分页等功能性工作
  • 现在我所需要的是,我只想获取一次数据并将其保存在内存中,这样当用户在搜索框中键入内容时,它就可以直接从存储的数据中执行搜索

    这是代码

            public ActionResult AjaxOil(JQueryDataTableParamModel param)
        {
           //To get data and should be run only once.
    
            IEnumerable<Oil> allOils = _context.Oils.ToList();
    
           //All others function.
            IEnumerable<Oil> filteredOils;
            if (!string.IsNullOrEmpty(param.sSearch))
            {
                filteredOils = allOils
                         .Where(c => c.CommonName.Contains(param.sSearch)
                                     ||
                                     c.BotanicalName.Contains(param.sSearch)
                                     ||
                                     c.PlantParts.Contains(param.sSearch)
                                     ||
                                     c.Distillation.Contains(param.sSearch));
            }
            else
            {
                filteredOils = allOils;
            }
    
            var sortColumnIndex = Convert.ToInt32(Request["iSortCol_0"]);
            Func<Oil, string> orderingFunction = (c => sortColumnIndex == 1 ? c.CommonName :
                                                                sortColumnIndex == 2 ? c.BotanicalName :
                                                                c.PlantParts);
    
    
            var distillationFilter = Convert.ToString(Request["sSearch_4"]);
            var commonFilter = Convert.ToString(Request["sSearch_1"]);
            var botanicalFilter = Convert.ToString(Request["sSearch_2"]);
            var plantFilter = Convert.ToString(Request["sSearch_3"]);
    
    
            if (!string.IsNullOrEmpty(commonFilter))
            {
                filteredOils = filteredOils.Where(c => c.CommonName.Contains(commonFilter));
    
            }
    
            if (!string.IsNullOrEmpty(botanicalFilter))
            {
                filteredOils = filteredOils.Where(c => c.BotanicalName.Contains(botanicalFilter));
    
            }
    
            if (!string.IsNullOrEmpty(plantFilter))
            {
                filteredOils = filteredOils.Where(c => c.PlantParts.Contains(plantFilter));
    
            }
    
            if (!string.IsNullOrEmpty(distillationFilter))
            {
                filteredOils = filteredOils.Where(c => c.Distillation.Contains(distillationFilter));
    
            }
    
    
            var sortDirection = Request["sSortDir_0"];
            if (sortDirection == "asc")
                filteredOils = filteredOils.OrderBy(orderingFunction);
            else
                filteredOils = filteredOils.OrderByDescending(orderingFunction);
    
            var displayedOils = filteredOils
                               .Skip(param.iDisplayStart)
                               .Take(param.iDisplayLength);
            var result = from c in displayedOils
                         select new[] { Convert.ToString(c.OilId), c.CommonName, c.BotanicalName, c.PlantParts, c.Distillation };
            return Json(new
            {
                sEcho = param.sEcho,
                iTotalRecords = allOils.Count(),
                iTotalDisplayRecords = filteredOils.Count(),
                aaData = result
            },
                             JsonRequestBehavior.AllowGet);
    
    public ActionResult AjaxOil(JQueryDataTableParamModel参数)
    {
    //要获取数据,应仅运行一次。
    IEnumerable allOils=_context.Oils.ToList();
    //所有其他功能。
    i数不清的过滤器;
    如果(!string.IsNullOrEmpty(param.sSearch))
    {
    filteredOils=allOils
    .Where(c=>c.CommonName.Contains(param.sSearch)
    ||
    c、 植物学名称.Contains(param.sSearch)
    ||
    c、 PlantParts.Contains(参数sSearch)
    ||
    c、 蒸馏.包含(参数sSearch));
    }
    其他的
    {
    filteredOils=allOils;
    }
    var sortcolumnidex=Convert.ToInt32(请求[“iSortCol_0”]);
    Func orderingFunction=(c=>sortColumnIndex==1?c.CommonName:
    sortColumnIndex==2?c.名称:
    c、 植物部分);
    var蒸馏过滤器=Convert.ToString(请求[“sSearch_4”]);
    var commonFilter=Convert.ToString(请求[“sSearch_1]”);
    var-filter=Convert.ToString(请求[“sSearch_2]”);
    var plantFilter=Convert.ToString(请求[“sSearch_3]”);
    如果(!string.IsNullOrEmpty(commonFilter))
    {
    filteredOils=filteredOils.Where(c=>c.CommonName.Contains(commonFilter));
    }
    如果(!string.IsNullOrEmpty(筛选器))
    {
    filteredOils=filteredOils.Where(c=>c.植物学名称.Contains(植物学过滤器));
    }
    如果(!string.IsNullOrEmpty(plantFilter))
    {
    filteredOils=filteredOils.Where(c=>c.PlantParts.Contains(plantFilter));
    }
    如果(!string.IsNullOrEmpty(蒸馏过滤器))
    {
    filteredOils=filteredOils.Where(c=>c.discreation.Contains(蒸馏过滤器));
    }
    var sortDirection=请求[“sortdir_0”];
    如果(排序方向==“asc”)
    filteredOils=filteredOils.OrderBy(orderingFunction);
    其他的
    filteredOils=filteredOils.OrderByDescending(orderingFunction);
    var displayedOils=filteredOils
    .Skip(参数iDisplayStart)
    .Take(参数iDisplayLength);
    var结果=显示仪表中的c
    选择new[]{Convert.ToString(c.OilId)、c.CommonName、c.植物学名称、c.PlantParts、c.distraction};
    返回Json(新的
    {
    sEcho=param.sEcho,
    iTotalRecords=allOils.Count(),
    iTotalDisplayRecords=filteredOils.Count(),
    aa数据=结果
    },
    JsonRequestBehavior.AllowGet);
    
    在第一次加载时,将数据保存在缓存/会话/静态字段中。在下一次搜索时,检查缓存/会话/静态字段是否为空,并从那里读取,而不是从数据库读取,否则从数据库再次读取

    例如:

    private static ObjectCache _cache = new MemoryCache("MemoryCache");
        public List<Oils> GetDataFromCache(string keyName)
        {
            //private static ObjectCache _cache = new MemoryCache("keyName");
            var data = _cache.Get(keyName); 
            if (data != null) return data as List<Oils>;
    
            data = _context.Oils.ToList();
            //keep the cache for 2h
            _cache.Add(keyName, data, DateTimeOffset.Now.AddHours(2));
            return data;
        } 
    
    private static ObjectCache\u cache=newmemorycache(“MemoryCache”);
    公共列表GetDataFromCache(字符串键名)
    {
    //私有静态ObjectCache_cache=newmemorycache(“keyName”);
    var data=\u cache.Get(keyName);
    如果(data!=null)返回数据列表;
    数据=_context.Oils.ToList();
    //将缓存保留2小时
    _Add(keyName,data,DateTimeOffset.Now.AddHours(2));
    返回数据;
    } 
    
    (没有测试代码,但这是逻辑)或者,如果愿意,您可以使用会话

    会话示例:

    if(Session["Data_Oils"] != null) { return Session["Data_Oils"] as List<Oils; } else { var temp = _context.Oils.ToList(); Session["Data_Oils"] = temp; return temp; } 
    

    if(Session[“Data_Oils”!=null){return Session[“Data_Oils”]as list还可以使用缓存添加回调函数以在过期后填充缓存,在示例中,在2hc之后可以建议有关该会话的一些细节吗?并且您最终忘记返回数据。if(Session[“Data_Oils”!=null){return Session[“数据”]如清单所示请更新我已标记为答案的答案。