有很多不同的选择。一位评论者提到了 SQLite 和 SQL Server Compact 版本,但如果您在本地运行数据库,您应该考虑是否需要如此复杂的东西,或者它是否只是矫枉过正。
您可能需要考虑LINQ 或LINQ to XML。 LINQ 是内置于 C# .NET 中的查询 API,在 .NET 的较新版本(例如 Core 3.1)中具有令人难以置信的性能,并且与整个 C# 生态系统非常干净地集成。
使用裸 LINQ,您可以在启动时从任何类型的文件格式加载数据(XML 或 JSON 很流行,我最近开始使用由 Google 开发的标准 FlatBuffers),其中您有一个 List<YourObjectModel> 包含所有您的数据库条目。 YourObjectModel 这里是一个代表数据库行的类。从那里,您可以通过以下两种方式之一来构建查询。有SQL风格
List<YourObjectModel> dataBase = LoadData();
var result = from entry in database
where entry.FieldA == "something"
select entry;
或者,我更喜欢流畅的风格
var result = database.Where(entry => entry.FieldA == "something");
在实践中,你可以用 LINQ 做任何你可以用 SQL 做的事情,包括排序、旋转、分组等。LINQ 有很多好处,但我最喜欢的卖点是“惰性求值”,而 LINQ 没有如果可以避免的话,不要一次执行整个查询。如果您不排序,将IEnumerable<T> 转换为不同的容器,或读取结果的Count 属性,LINQ 将运行查询的时间足够长以获得一个结果,然后准备好它。如果您将结果传递到 foreach 循环或其他一些场景,这可能会导致性能大幅提升。
一些轶事证据,我正在开发一个简单的 2D 游戏引擎,我需要按实体的 Z 坐标对实体进行排序,以便从后到前绘制它们。我很懒,使用 LINQ 查询对包含 10,000 多个对象的List<GameEntity> 进行排序,因为它是一种单行解决方案。它运行得很好。我回去实现了一个适当的排序,发现它实际上比 LINQ 慢。我花了一个下午试图实现一个比 LINQ 更快的排序算法,但没有成功。