2016-04-21 61 views
1

我正在嘗試編寫一種方法,將所有Book文檔從MongoDB返回給我的mvc應用程序。首先,我連接到數據庫,檢索集合並將該集合轉換爲Json文件。接下來,我使用序列化程序創建一個列表,其中包含指定的幾個字段(名稱,作者等),我嘗試將其反序列化爲列表,並使用for循環返回書籍列表。令人遺憾的是我在返回行中出現錯誤(轉換錯誤)。任何建議都歡迎!將MongoDB文檔轉換爲c#對象列表

public List<Book> getAllBooks() 
    { 
     var mongoClient = new MongoClient("mongodb://localhost"); 
     var database = mongoClient.GetDatabase("SearchForKnowledge"); 
     var coll = database.GetCollection<BsonDocument>("Book"); 
     coll.ToJson(); 

     List<Book> collection = new List<Book>(); 

     JavaScriptSerializer js = new JavaScriptSerializer(); 
     collection = (List<Book>)Newtonsoft.Json.JsonConvert.DeserializeObject(coll.ToString()); 

     for (int i = 0; i < collection.Count(); i++) 
     { 
      return collection[i]; 
     } 
    } 

回答

2

好,你應該嘗試更簡單的方法:

// add this using first 
using MongoDB.Driver.Linq; 

var coll = database.GetCollection<Book>("Book").AsQueryable<Book>(); 

而且比你可以做任何事情,如:

var someBooks = coll.Where(b => b.Year == 2014).Skip(0).Take(10).ToArray(); 

PS:你需要看看這個教程:https://mongodb-documentation.readthedocs.org/en/latest/ecosystem/tutorial/use-linq-queries-with-csharp-driver.html

+0

但是如何返回集合中的所有書籍?這種方法不僅僅在有條件的情況下才起作用嗎?我可以在得到它的值後返回coll變量嗎? – Kelb56

+0

當然,你可以用ToArray()或ToList()擴展。 例如database.GetCollection (「Book」)。ToArray(); – Eckd