将Linq-To-SQL列表导入MongoDB

inq*_*one 5 c# linq import mongodb linq-to-sql

我有一个非常简单的LinqToSql列表.

var list = DB.Where(c => c.Status.Equals("active")).Select(c => c.Name);
Run Code Online (Sandbox Code Playgroud)

我正在尝试将该列表导入MongoDB.这是我到目前为止所拥有的:

const string connectionString = "mongodb://localhost";
var client = new MongoClient(connectionString);
MongoServer server = client.GetServer();
MongoDatabase database = server.GetDatabase("test");
var collection = database.GetCollection("salesppl");
collection.Insert(list);
Run Code Online (Sandbox Code Playgroud)

我也尝试过InsertBatch和Save,但没有运气.以下是我为每个错误消息:InsertBatch

BsonSerializationException:Serializer StringSerializer期望序列化选项类型为RepresentationSerializationOptions,而不是DocumentSerializationOptions.

插入

BsonSerializationException:Serializer EnumerableSerializer期望ArraySerializationOptions类型的序列化选项,而不是DocumentSerializationOptions.

保存

InvalidOperationException:Save只能用于具有Id的文档.

注意: 我认为这没有任何意义,但我通过LinqPad这样做.

那么,如何将此列表保存到MongoDb?

inq*_*one 0

我刚刚发现我的 salesppl 字符串列表无法存储为顶级项目。我需要使用类来保存列表或使用 BsonDocument。

这是对我有用的代码:

var list = DB.Where(c => c.Status.Equals("active"))
             .Select(c => new BsonDocument("name", c.Name))
             .ToList();
Run Code Online (Sandbox Code Playgroud)

然后对于 MongoDB 中的集合,我需要使用:

collection.InsertBatch(list);
Run Code Online (Sandbox Code Playgroud)

我更新后的代码现在看起来像这样:

var list = DB.Where(c => c.Status.Equals("active"))
             .Select(c => new BsonDocument("name", c.Name))
             .ToList();

const string connectionString = "mongodb://localhost";
var client = new MongoClient(connectionString);
MongoServer server = client.GetServer();
MongoDatabase database = server.GetDatabase("test");
var collection = database.GetCollection("salesppl");
collection.InsertBatch(list);
Run Code Online (Sandbox Code Playgroud)