C#中如何将LiteCollection保存为CSV文件?
在C#中使用LiteDB导出LiteCollection到CSV文件
方法1:使用LiteDB内置的SQL命令
你看到的SELECT $ INTO $FILE('customers.csv') FROM Customers是LiteDB内置的SQL导出命令,直接通过LiteDatabase的Execute方法执行即可,无需手动处理CSV格式。
示例代码:
using LiteDB; // 连接到LiteDB数据库 using var db = new LiteDatabase("MyDatabase.db"); // 执行导出SQL命令 db.Execute("SELECT $ INTO $FILE('customers.csv') FROM Customers");
- 细节说明:
$代表导出集合的所有字段,若只需导出特定字段,可替换为字段名,比如SELECT Name, Age, Email INTO $FILE('customers.csv') FROM Customers- 文件路径:
'customers.csv'是相对路径,会生成在程序运行目录下;也可使用绝对路径,比如$FILE('C:/exports/customers.csv') - 若目标文件已存在,LiteDB会直接覆盖,注意备份重要文件
方法2:手动生成CSV(自定义格式场景)
如果需要自定义CSV分隔符、处理特殊字符(比如字段包含逗号/引号)、格式化日期/数值等,建议手动遍历集合生成:
示例代码:
using LiteDB; using System.IO; using System.Linq; using var db = new LiteDatabase("MyDatabase.db"); var collection = db.GetCollection<Customer>("Customers"); // 假设你定义了Customer实体类 // 设置导出路径 var csvPath = "custom_customers.csv"; using var writer = new StreamWriter(csvPath); // 写入表头(从实体类属性获取) var firstDoc = collection.FindAll().FirstOrDefault(); if (firstDoc != null) { var headers = string.Join(",", firstDoc.GetType().GetProperties().Select(p => p.Name)); writer.WriteLine(headers); // 遍历所有文档并写入行数据 foreach (var customer in collection.FindAll()) { // 处理字段中的逗号/引号,符合CSV标准格式 var fields = customer.GetType().GetProperties() .Select(p => { var value = p.GetValue(customer)?.ToString() ?? ""; return value.Contains(",") || value.Contains("\"") ? $"\"{value.Replace("\"", "\"\"")}\"" : value; }); var line = string.Join(",", fields); writer.WriteLine(line); } }
- 细节说明:
- 若没有实体类,可通过
BsonDocument处理:遍历document.Keys获取字段名,document[key]获取对应值 - 特殊字符处理:当字段包含逗号或双引号时,需用双引号包裹字段,且内部双引号要替换为两个双引号(CSV标准规则)
- 可自定义分隔符(比如用
;代替,),只需修改string.Join的分隔符参数
- 若没有实体类,可通过
注意事项
- 确保程序对目标文件路径有写入权限
- 导出大量数据时,手动方式建议用分页查询(
collection.Find(Query.All()).Skip(page*pageSize).Limit(pageSize))避免内存占用过高 - 日期、布尔值等类型可根据需求自定义格式化逻辑
内容的提问来源于stack exchange,提问作者JustAPleb
相关产品推荐
相关产品推荐

