2011-12-23 33 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; 
    } 
相关问题