2017-10-16 112 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

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

相關問題