首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在没有全局变量的情况下始终保留变量?

如何在没有全局变量的情况下始终保留变量?
EN

Stack Overflow用户
提问于 2012-07-28 23:54:46
回答 3查看 118关注 0票数 0

我有两个GridViews。我有一个GetGeneralDiagnosis方法,它返回所有诊断的列表:

代码诊断

F50进食障碍

F51非器质性睡眠障碍

以及GetSpecificDiagnosis方法,它返回更具体的列表:

代码诊断

F50.0神经性厌食症

F50.1非典型神经性厌食症

F51.0非器质性失眠

F51.1非器质性睡眠症

现在,我已经得到了根据第一个GridView的一般诊断将特定诊断绑定到第二个GridView的方法。

代码语言:javascript
运行
复制
protected void gvGeneralDiagnosis_SelectedIndexChanged(object sender, EventArgs e)
{
    string generalDiagnosis = gvGeneralDiagnosis.DataKeys[gvGeneralDiagnosis.SelectedIndex].Values["ICD10Code"].ToString(); 
    var ICD10 = Visit.GetSpecificDiagnosis();   // here I'm getting data from database
    gvSpecificDiagnosis.DataSource = ICD10.Where(i => i.ICD10Code.Contains(generalDiagnosis)).Select(i => new { i.ICD10Name, i.ICD10Code });
    gvSpecificDiagnosis.DataBind();
}

我不想每次选定的索引更改时都连接到数据库。

如何才能只获取一次列表var ICD10 = Visit.GetSpecificDiagnosis()?我听说全局变量是一个非常糟糕的主意,那么我该如何用另一种方式来实现呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-29 00:08:31

您可以使用私有成员变量。只要包含它的类存在,这个类就会“存活”。用一个属性包装它以访问它,并在必要时自动从数据库中读取它。

代码语言:javascript
运行
复制
private TypeOfICD10 _icd10;
private TypeOfICD10 ICD10
{
    get
    {
        if (_icd10 == null) { // Get from database.
            _icd10 = Visit.GetSpecificDiagnosis();   
        }
        return _icd10;
    }
}

现在您可以像这样使用它,并且只在第一次调用时从db中读取它。

代码语言:javascript
运行
复制
protected void gvGeneralDiagnosis_SelectedIndexChanged(object sender, EventArgs e)
{
    string generalDiagnosis = gvGeneralDiagnosis.DataKeys[gvGeneralDiagnosis.SelectedIndex].Values["ICD10Name"].ToString();
    gvSpecificDiagnosis.DataSource = ICD10
        .Where(i => i.ICD10Code.Contains(generalDiagnosis))
        .Select(i => new { i.ICD10Name, i.ICD10Code });
    gvSpecificDiagnosis.DataBind();
}
票数 1
EN

Stack Overflow用户

发布于 2012-07-29 00:02:01

您可以让Visit类缓存返回的数据。

当调用GetSpecificDiagnosis时,它将检查是否已从数据库中检索到该数据,如果已检索到,则返回该数据。如果不是,它将从数据库中检索数据并将其保存到缓存中。

您应该注意的一件事是,这些数据是静态的(即在应用程序的整个生命周期中都不会发生变化)还是动态的。在第一种情况下,您不必进行任何特殊处理,但如果是后者,则必须在数据库中的信息发生更改时使缓存无效。

我建议您访问have a look here,了解如何开始使用ASP.NET中的缓存。

票数 1
EN

Stack Overflow用户

发布于 2012-07-29 00:13:23

从你的问题中我不太了解Visist类,但是为什么不以这种方式缓存ICD10您将使用缓存的对象,并且只有当缓存键ICD10的值为null时,才会进行数据库调用

示例:

代码语言:javascript
运行
复制
if(Cache["ICD10"] == null)
{
 var ICD10 = Visit.GetSpecificDiagnosis();
 Cache["ICD10"] = ICD10;
}
else
{
var ICD10 =  Cache["ICD10"];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11702497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档