C# 我需要一个存储过程来返回三行,我应该如何存储它们?
通常我只对键值对使用一个字典,但我期望有三列C# 我需要一个存储过程来返回三行,我应该如何存储它们?,c#,vb.net,C#,Vb.net,通常我只对键值对使用一个字典,但我期望有三列 然后,我需要比较搜索词,看看它是否与第二列中的任何值匹配。如果您想快速而准确地返回一个数据表,就可以了。否则,如果数据表示某些内容,则可以创建自己的类来保存对象上三个属性中的三个值 public class MyDataObject { public string Value1 { get; set; } public string Value2 { get; set; } public string Value3 { get; set;
然后,我需要比较搜索词,看看它是否与第二列中的任何值匹配。如果您想快速而准确地返回一个数据表,就可以了。否则,如果数据表示某些内容,则可以创建自己的类来保存对象上三个属性中的三个值
public class MyDataObject
{
public string Value1 { get; set; }
public string Value2 { get; set; }
public string Value3 { get; set; }
public bool MatchesSearchTerm(string term)
{
return Value2.Equals(term, StringComparer.OrdinalIgnoreCase);
}
}
搜索词是什么?为什么首先需要存储行
假设您有充分的理由将结果存储在本地,并且只关心第二列中的任何值,那么您可能希望探索存储列表。为什么不将这三个值加载到具有三个属性的静态类型对象中?而且,由于您不清楚行/列,如果有多行,只需将它们加载到此对象的IEnumerable中。因为我需要缓存结果,这很好。我只需要两个值,所以我使用了字典,现在我需要三个参数,没有理由不能在应用程序的任何层缓存任何数据。您的缓存现在是如何工作的?如果需要缓存对象,只需缓存对象即可。除非缓存系统被破坏,否则对象是字典还是任何其他对象都应该是一样的。我想它所需要的是可序列化的。我不建议使用我的命名约定,对于正在处理的数据,您肯定会有一些更有意义的东西。我需要缓存查询的结果,即任何对象都可以缓存,具体取决于您使用的缓存类型。正如你所说,缓存就像字典一样简单。看看我的答案。
class YourDatum
{
int Id { get; set; }
string Value1 { get; set; }
string Value2 { get; set; }
public bool Match(string term)
{
return Value2.ToUpperInvariant() == term.ToUpperInvariant();
}
}
var cachedResults = new Dictionary<int, YourDatum>();
//your database calls go here
foreach (var dbRow in dbRows)
{
cachedResults.Add(
idFromDb,
new YourDatum {Id=idFromDb, Value1=valueFromDb1, Value2=valueFromDb2});
}
//find a match in the results later on...
string searchTerm = "abcdef";
List<YourDatum> matches=
(from datum in cachedResults where
datum.Match(searchTerm) select datum).ToList();
public class QueryCache
{
public class DataObject
{
public bool Data1 { get; set; }
public string Data2 { get; set; }
public int Data3 { get; set; }
}
Dictionary<string, DataObject> _cache = new Dictionary<string, DataObject>();
public void AddToCache(DataObject obj_)
{
_cache.Add(obj_.Data2, obj_);
}
public bool ExistsInCache(string searchTerm_)
{
return _cache.ContainsKey(searchTerm_);
}
public DataObject this[string searchTerm_]
{
get
{
return _cache[searchTerm_];
}
}
}