什么数据结构类似于数据库?

时间:2018-02-03 23:01:11

标签: c# oop data-structures f#

什么是可以替换SQL等数据库的数据结构(如列表,数组等)?

我希望它拥有尽可能多的类似数据库的功能,比如查询选择等......

如果没有,建议结构应该是什么样的

编辑:

我认为数据表已经足够好了,答案是

3 个答案:

答案 0 :(得分:1)

假设您已经了解Entity Framework作为ORM和访问数据库的网关,以下是您需要考虑的一些替代方案。

针对小数据量的一个直接快速解决方案是serialization

您可以选择:

序列化允许您存储和检索对象图,而不必担心设置DB和连接。但是没有提供复杂的搜索和更新功能。

您可能想要探索的

另一件事NoSQL个数据库。

查看LiteDB以开始使用此概念。

答案 1 :(得分:1)

如果您要使用实际的SQL数据库,那么 (按MSDN):

private static void CreateCommand(string queryString, string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand(queryString, connection);
        command.Connection.Open();
        command.ExecuteNonQuery();
    }
}

如果您希望不使用实际的SQL数据库并尝试直接在代码中保存数据,关系等(不确定为什么要这样做),您可以为它创建自己的自定义类。你想要包含某种形式的表,以及可以查看表的实例等的搜索方法。虽然你需要实现许多功能,所以如果这样做很难做到您正在尝试复制真正SQL数据库的所有功能。

答案 2 :(得分:1)

最简单的数据结构是F#中的record或C#中的class。这将代表你的桌子。表的集合将代表数据库。您可以使用query expressions(也称为Linq)进行查询,并按照上面的指示对其进行序列化。您还可以使用DataTable。如果您只是在寻找数据库的内存表示形式,那么可以使用SQLite

如果您只想访问数据库,可以使用F#中的SQLProvider或F#和C#中的Dapper来访问数据库。

以下是一个包​​含记录列表和查询表达式的示例:

open System

type Row = {
    Id: bigint
    Name: string
    Address: string
}

let table = [
    {Id = 100I; Name = "Joe"; Address = "NYC"}
    {Id = 101I; Name = "Jane"; Address = "KC"}
    {Id = 102I; Name = "Jim"; Address = "LA"}
]

let notInNYC = 
    query {
        for user in table do
            where (user.Address <> "NYC")
            select user.Name
    }   
    |> Seq.toList
//val notInNYC : string list = ["Jane"; "Jim"]