You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 01:12:53