我对编程比较陌生,所以这是我的问题。
我有一个C#-Forms应用程序和一个访问数据库。 在数据库中,我有大约200-300辆汽车的数据(名称,建造年份......) 在我的表单应用程序中,我显示列表中的所有汽车,我有一个过滤器,我可以搜索特定的单词和类型等。
目前我对任何过滤器输入作出反应,然后执行新的sql-query并列出所有适合过滤器的汽车。
我显然不认为这是一个很好的解决方案,因为我有一个数据库访问每个keyDown操作。
创建汽车级并为每辆汽车创建此类的实例并将其存储在列表中是否是一种可行的方法? 如果没有一次又一次地从数据库中读取所有200辆汽车,最好的办法是什么?
答案 0 :(得分:0)
以下代码可能会有所帮助,但您应填写空白。
class CarDA
{
public const string YOUR_SPECIFIC_CACHE_KEY = "YOUR_SPECIFIC_CACHE_KEY";
public IList<Car> Search(string searchExpression)
{
var carList = ListAllCars();
//AMK: do the math and do the filter
return Filtered_Car_List;
}
private IList<Car> ListAllCars()
{
var ExpireTime = 10;
if (!MemoryCache.Default.Contains(YOUR_SPECIFIC_CACHE_KEY))
{
MemoryCache.Default.Add(
new CacheItem(YOUR_SPECIFIC_CACHE_KEY, PopulateCarList()),
new CacheItemPolicy
{
AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(ExpireTime)
});
}
return MemoryCache.Default.Get(YOUR_SPECIFIC_CACHE_KEY) as IList<Car>;
}
private IList<Car> PopulateCarList()
{
//AMK: fetch car list from db and create a list
return new List<Car>();
}
}
class Car
{
public string Name { get; set; }
}
答案 1 :(得分:0)
似乎更像是一个哲学问题,而不是技术问题,所以我想给你2美分。 如果Cars数据库仅由您的应用程序修改并且应用程序由单个人运行,则您可以读取数据一次,并在UI中设置一种机制,以便在通过UI更新数据库时实现内存数据。 如果您有多个用户使用数据并更新数据库,以便一个用户可以将汽车添加到数据库而另一个用户正在读取它以对其执行某些操作,则必须准备一种机制来验证数据是否已被某人修改过系统中的其他所有用户,以便他们可以重新加载汽车列表。 (例如,它可以是对表格的临时查询,例如记录汽车表的更新日期和时间,或者在不同情况下它可能更复杂)。 这样说,通常在使用数据库时,我会准备一个“数据提供者”类,这个类可以说出来。使用数据库,创建,更新,删除和查询数据,一个表示我的数据的表行的类(在您的情况下是Car类)和DataProvider将List返回到我的用户界面,我可以按原样使用,或者,如果需要的话,如果将它与WPF UI对象一起使用并且数据可以更改,我可以移动到ObservableCollection,或者我可以创建类似于UICar对象的汽车以及与其在用户界面内使用相关的其他属性,这可能更有用使用您的应用程序为用户提供操作和功能。 当您在应用程序中使用Cars集合时,使用简单的Linq查询在内存数据中搜索变得相当简单,并且比在搜索文本框中的任何更改时调用数据库更有效。 另外,作为建议,要避免在任何击键时查询(内存或db是相同的),在键事件中启动查询重置之前设置一个计时器(仅几毫秒),以便在用户输入单词时查询在他/她停止打字时开始。 HTH