2017-10-16 258 views
0

这里我正在尝试将Bson Document列表转换为Class列表。这样做的主要目的是过滤Json数据列表中的数据。我正在为我的数据库和C#使用MongoDb来处理数据。我已经存储了一些数据在MongoDB中,并试图使用过滤FilterDefinition这样的数据:如何将List <BsonDocument>转换为C#中的<Class>列表

PROCESS 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>

回答

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

应该是:

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

这样,你应该能够使用查找方法来检查使用类似的文件名和FileNumber:

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

它工作正常。 .. 非常感谢你.... –

相关问题