我有一个包含三列的数据库表:CodeType、Code、Name
我将这些值保存在内存中,如果您愿意将这些值分配给 Lookup,那是一个穷人的缓存。
public class ShortCodeCache
{
public DateTime LastRefresh { get; set; }
public Lookup<string, ShortCode> CodeList { get; set; }
}
public class ShortCode
{
public string CodeType { get; set; }
public string Code { get; set; }
public string Name { get; set; }
}
我从数据库中提取值并将它们分配给查找。
private static void GetShortCodeCache(DateTime current)
{
try
{
using (SqlConnection cn = new MSSqlServerConnection().GetConnection())
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = Query;
cmd.Connection = cn;
cn.Open();
List<ShortCode> codesList = new List<ShortCode>();
SqlDataReader readline = cmd.ExecuteReader();
while (readline.Read())
{
ShortCode shortCode = new ShortCode
{
CodeType = readline["CodeType"].ToString().Trim(),
Code = readline["Code"].ToString().Trim(),
Name = readline["Name"].ToString().Trim()
};
codesList.Add(shortCode);
}
currentCache.CodeList = (Lookup<string, ShortCode>)codesList.ToLookup(code => code.CodeType);
if (currentCache.CodeList.Count != 0)
currentCache.LastRefresh = current;
if (log.IsDebugEnabled)
{
log.Debug("LastCacheRefresh: " + currentCache.LastRefresh);
}
}
}
}
catch (SqlException sqlex)
{
log.Error(sqlex.Message);
throw;
}
catch (Exception ex)
{
log.Error(ex.Message);
throw;
}
return;
}
我相信这部分到这里是有效的。
我的问题是我无法获取特定 CodeType 和 Code 的名称。例如,我传入“DamageQuadrant”和“P9”,我需要 Name 值。
这是我目前拥有的,但是 VS 对我咆哮着说没有 CodeType 的定义。
public static string GetNameFromCode(string type, string code)
{
CheckCodeCache();
var codeType = currentCache.CodeList.Where(x => x.Key == type);
string data = codeType.Where(x => x.CodeType, code).Name;
return data;
}
我尝试了各种其他方法,包括在 Linq 代码中使用 && 条件。这看起来很容易,但到目前为止还不是。