繁体   English   中英

如何转换清单 <BsonDocument> 列出 <Class> 在C#中

[英]How to convert List<BsonDocument> to List<Class> in C#

在这里我想做的是将Bson Document列表转换为Class列表。 这样做的主要目的是从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>
var collection = context.Db.GetCollection<BsonDocument>("DBCollection");

应该:

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

这样,您应该能够使用Find方法使用类似以下方法来检查您的FileName和FileNumber:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM