如何在C#中将List <bsondocument>转换为List <class>

时间:2017-10-16 10:48:03

标签: c# mongodb list bson

这里我要做的是将List of 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。 / p>

我的问题是:

  1. PROCESS 1
  2. 出了什么问题
  3. 如何将List<BsonDocument>转换为List<MyClass>
  4. 如何过滤List<BsonDocument>

1 个答案:

答案 0 :(得分:2)

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();