如何在 C# 中将 List<BsonDocument> 转换为 List<Class>

问题描述 投票:0回答:2

这里我想做的是将Bson文档列表转换为类列表。这样做的主要目的是从Json数据列表中过滤数据。我使用 MongoDb 作为数据库,使用 C# 来处理数据。我已经在 MongoDb 中存储了一些数据,并尝试使用

FilterDefinition
过滤数据,如下所示:

流程1

 FileContext context = new FileContext();
 var collection = context.Db.GetCollection<BsonDocument>("DBCollection");
 var builder = Builders<BsonDocument>.Filter;
 FilterDefinition<BsonDocument> Filter = builder.Eq("FileName", fileDetail.FileName) & builder.Eq("FileNumber", fileDetail.FileNumber.ToString());
 var list = await collection.Find(Filter).ToListAsync();

这样我就无法获取列表中的数据。因此,我尝试了另一种方式:

流程2

 FileContext context = new FileContext();
 var collection = context.Db.GetCollection<BsonDocument>("DBCollection");
 var list = await collection.Find(_ => true).ToListAsync();
 List<MyClass> objList = null;
 foreach (var item in objList)
 {
   objList = new List<MyClass>();
   objList.Add(BsonSerializer.Deserialize<MyClass>(item));
 }
 if(objList.Count >0)
 {
    int count = objList.Where(x => x.FileName == "SOME_FILE_NAME" && x.FileNumber == 1).Count();
 }

通过这种方式,我能够获取数据并能够过滤数据,但我知道这根本不是好的编程,因为如果将来数据大小增加,这将有很多

waiting time

我的问题是:

  1. PROCESS 1
    出了什么问题?
  2. 如何将
    List<BsonDocument>
    转换为
    List<MyClass>
  3. 如何过滤
    List<BsonDocument>
c# mongodb list bson
2个回答
3
投票
var collection = context.Db.GetCollection<BsonDocument>("DBCollection");

应该是:

var collection = context.Db.GetCollection<MyClass>("DBCollection");

这样您应该能够使用 Find 方法来检查您的文件名和文件编号,例如:

var objList = await collection.Find(x => x.FileName == "FILENAMEHERE" && x.FileNumber == 1).ToListAsync();

0
投票

只需一行代码即可将BsonDocuments列表直接转换为类对象列表。

var objList = JsonConvert.DeserializeObject<List<classname>>(bsonDocList.ToJson());

确保将 bsondocuments 列表转换为 json 而不是字符串。希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.