2011-12-23 101 views
1

我有MongoDB.BsonDocument,我想給BsonDocument轉換爲收集名單,我怎麼能做到這一點的,我粘貼下面我的示例代碼...如何將MOngoDB.BsonDocumnet轉換爲c#中的集合列表?

try 
{ 
    var server = MongoServer.Create("localhost:27017"); 
    var db = server.GetDatabase(DATABASE); 
    var riskdata = db.GetCollection("TABLESAMPLE"); 
    var query = Query.EQ("Name", null); 
    var results = riskdata.Find(query); 
    gridsample.ItemsSource = results; 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

,但上面的代碼不是爲我工作。 ...「_ id」只綁定到網格,剩餘的字段不會到來。

+0

你有在該表中哪些數據?給我們看一看。 – 2011-12-23 05:54:18

+0

在表中我有3列,名稱發件人目標>在網格中,我也有樣本columns.when我從Mongo表中檢索文件,我需要綁定到網格的集合。@ Sergei Tulentsev – user483886 2011-12-23 06:14:35

+0

以前爲綁定表格數據到網格,我使用foreach像.. http://pastebin.com/BKYfn58x – user483886 2011-12-23 06:19:48

回答

1

很可能您的網格不理解BsonDocument

你需要看看序列化那些BSON documents into classes

它會是這個樣子:

class MyDocument { 
    public string name { get; set; } 

    public int a { get; set; } 

    public int b { get; set; } 
} 

然後你改變你發現返回這些東西

IEnumerable<MyDocument> results = riskdata.FindAs<MyDocument>(query).ToList(); 
gridsample.ItemsSource = results; 

現在你將有你的網格可以讀取屬性的類。

+0

嗨蓋茨副總裁,我試着用上面的代碼,我得到錯誤,如「錯誤的非泛型方法」MongoDB.Driver.MongoCollection .Find(MongoDB.Driver.IMongoQuery)'不能與類型參數一起使用「 – user483886 2011-12-23 06:34:32

+0

我改變了上面的小改動,現在它正在工作。 – user483886 2011-12-23 07:19:38

+0

@GatesVP:1.當你不使用與屬性名稱不同的字段名稱時,不需要使用'BsonElement'屬性。 2.要告訴驅動程序自動將文檔反序列化爲特定類型,需要使用'FindAs '而不是'Find'。 – 2011-12-23 09:40:25

1

可以通過轉換BsonBocument任何結構的數據表綁定BsonDocument不聲明類

public DataTable GetDataTableFromMongoCursor(MongoCursor cursor) 
    { 
     if (cursor != null && cursor.Count() > 0) 
     { 

      DataTable dt = new DataTable(cursor.ToString()); 
      foreach (BsonDocument doc in cursor) 
      { 

       foreach (BsonElement elm in doc.Elements) 
       { 
        if(!dt.Columns.Contains(elm.Name)) 
        { 
         dt.Columns.Add(new DataColumn(elm.Name)); 
        } 

       } 
       DataRow dr = dt.NewRow(); 
       foreach (BsonElement elm in doc.Elements) 
       { 
        dr[elm.Name] = elm.Value; 

       } 
       dt.Rows.Add(dr); 
      } 
      return dt; 

     } 
     return null; 
    } 
相關問題