0

我正在寻找一个多列数据库,但即使是超过一兆字节的 SQLite 似乎也有点矫枉过正(除非你使用类似的东西,否则它不适用于 C# 。我只想要最多 100-500k 的代码。这里最好的选择是什么?

C# 中的通用字典在一定程度上很有用,但默认情况下,它不允许您从给定值中检索键。同样,我可能有两列以上的数据,即使我使用BiDictionary并将值作为类/结构(对于多个值),我也需要找到 n 列值的键,然后找到键的新 o 列值。所以这有点不方便(加上那个链接是一个不完整的实现,甚至没有'set'命令)。

这是我可能创建的表的一个简单示例(但是我可能有十几列或一千行):

name       type colour  length
orange     a    orange  5
apple      a    green   4
banana     c    yellow  7
strawberry b    red     3
blackberry b    black   2
gooseberry b    green   2

我想从任何其他值中检索/设置表中的任何值,最好使用 LINQ 或类似 SQL 的查询以及快速检索/写入和大型数据集(如果可能)。

4

3 回答 3

5

该类DataSet可能非常适合您正在做的事情 - 您可以直接从 XML(ReadXml方法)将数据加载到其中,这将转换为内存表。

使用DataTable(或多个及其关系)表示您的数据,您可以使用 LINQ 查询它。

于 2012-05-27T21:02:40.807 回答
0

根据 Oded 的回答和这个老问题,我开始编写一些示例代码,它很有效:

//////////////////////////////////////////////
//// Setting up the table is as simple as this: 
DataTable table = new DataTable("fruit");

table.Columns.Add("name", typeof(string) );
table.Columns.Add("type", typeof(char));
table.Columns.Add("colour", typeof(string));
table.Columns.Add("length", typeof(int));

//////////////  name, type, colour, length
table.Rows.Add("orange", 'a',"orange", 5);
table.Rows.Add("apple", 'a',"green", 4);
table.Rows.Add("banana", 'c',"yellow", 7);
table.Rows.Add("strawberry", 'b',"red", 3);
table.Rows.Add("blueberry", 'b',"black", 1);
table.Rows.Add("gooseberry", 'b',"green", 2);
//////////////////////////////////////////////

////// Accessing the data via Linq!
var results = table.AsEnumerable()
    .Where(row => row.Field<char>("type") == 'b')
    .OrderBy(row => row.Field<int>("length"))
    .Select(row => row.Field<string>("name") +": "+row.Field<string>("colour"));                
foreach(string s in results) Console.WriteLine(s);
///////////////////////////////

输出是:

blueberry: black
gooseberry: green
strawberry: red
于 2012-05-28T02:03:39.920 回答
0

SQL Server 精简版可免费使用 .NET:http ://en.wikipedia.org/wiki/SQL_Server_Compact

它使用平面 .sdf 文件存储数据,您可以针对它编写 SQL 查询。

于 2012-06-04T19:21:06.103 回答