ここで簡単な解決策が欠けていると思います。IQueryable を返す select (IQueryable で Linq スタイルを使用) を実行すると、挿入で使用するものとは異なる形式のキー/値を MyClass に返してもらいたい場合があります。
以下の UploadFile クラスを例として考え、プロパティ id と Filetimestamp に注意してください。Filetimestamp を設定すると、DateTime として保存されますが、IQueryable を取得するときは次のようにします。
- Filetimestamp が文字列 OR として返されるのを参照してください
- Filetimestamp.toString() を反映した String として返される別のプロパティを参照してください。このプロパティには、データベースに対応するキーがありません。これは、BSON からの実際のキー/値の単なる装飾です。
#1 はありそうもないと思ったので、Filetimestamp.toString() を返す取得専用フィールド Filetimestamp_str を追加することで #2 を追求しました。選択すると、動作は期待どおりです。挿入すると、失敗が見られます。
get に使用するデコレータ クラスを作成することもできますが、すべてが機能します。
public class UploadFile : IUploadFile
{
public Object _id { get; set; }
public String Filepath { get; set; }
public String Filename { get; set; }
public String Filetype { get; set; }
public String Fileauthor { get; set; }
public DateTime Filetimestamp { get; set; }
public Object FileID { get; set; }
// these keys are not in DB
public String Filetimestamp_str { get { return Filetimestamp.ToString(); } }
public String _id_str { get { return _id.ToString(); } }
}