2011-12-23 14 views
1

私はMongoDB.BsonDocumentは、私はC#でMOngoDB.BsonDocumnetをコレクションのリストに変換するにはどうすればよいですか?

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); 
} 

が、コードの上に私のために働いていない...私はこの1つを行うことができますが、私は以下の私のサンプルコードを貼り付けるか、コレクションのリストにそのBsonDocumentを変換したいです。 ... "_ id"はグリッドにのみバインドされ、残りのフィールドは表示されません。

+0

せずにデータテーブルにコンバートBsonBocumentにより任意の構造でBsonDocumentをバインドすることができますか?私たちに見せてください。 –

+0

には、3列のName Sender Target>グリッド内にもサンプル列があります.Mongoテーブルからドキュメントを取得し、そのコレクションをグリッドにバインドする必要があります。@ Sergei Tulentsev – user483886

+0

グリッドへのバインディングテーブルデータ私はforeachを使用しています.. http://pastebin.com/BKYfn58x – user483886

答えて

1

グリッドがBsonDocumentを理解していない可能性があります。

BSON documents into classesをシリアル化する必要があります。

それは次のようなものになります。そして、あなたは

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

今、あなたはあなたのグリッドを読むことができるプロパティを持つクラスを持つことになり、これらのものを返すように検索を変更

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

    public int a { get; set; } 

    public int b { get; set; } 
} 

を。

+0

こんにちはゲートVP、私は上記のコードを試した "エラー非汎用メソッド 'MongoDB.Driver.MongoCollection .Find(MongoDB.Driver.IMongoQuery) '型引数で使用することはできません " – user483886

+0

私は上記の小さな変更を変更した、今は動作しています。 – user483886

+0

@GatesVP:1.プロパティ名とは異なるフィールド名を使用しない場合は、 'BsonElement'属性を使用する必要はありません。 2.ドライバが自動的に文書を特定のタイプに逆シリアル化するように指示するには、 'FindAs 'の代わりに' FindAs 'を使用する必要があります。 –

1

あなたがそのテーブルにどのようなデータを持っていない宣言クラス

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; 
    } 
関連する問題