0

次のコードが機能しています。

var Logs = MvcApplication.MongoLoggingDatabase.GetCollection<Log>("Log")
            .Find(queryDocument)
            .Select(x => new LogDto { ModelNumber = x.Request.ModelNumber, Make = x.Request.Make, TimeStamp = x.TimeStamp, UserId = x.UserId })
            .OrderByDescending(x => x.TimeStamp)
            .Skip(pageSize * (page - 1))
            .Take(pageSize);

結果を LogDto にマップすることができます。しかし、代わりに FindAs を使用して、必要なフィールドを照会し、対応するサブプロパティを期待どおりにマップできるかどうか疑問に思っています。

私は次のようなものを試しました:

var Logs = MvcApplication.MongoLoggingDatabase.GetCollection<Log>("Log")
                .FindAs<LogDto>(queryDocument)
                .SetFields(Fields.Exclude("_id").Include("TimeStamp", "UserId", "Request_ModelNumber", "Request_Make"))
                 .OrderByDescending(x => x.TimeStamp)
                .Skip(pageSize * (page - 1))
                .Take(pageSize);

TimeStamp と UserId は正しくマッピングされていますが、Make と ModelNumber のみが null を示しています。SetFields を使用して、Request.ModelNumber と Request.Make を LogDto の対応するフィールド (Make と Model) にマップする方法を知りたいです。

4

1 に答える 1

0

あなたはおそらくそれを行うことはできません。SetFields を使用して、返されるフィールドを選択できますが、返されるドキュメントを再形成するために使用することはできません。LogDto を逆シリアル化するために必要なすべての値は、BSON ドキュメントの同じレベルから取得する必要があります (ModelNumber や Make のように Request 内にネストされている値ではありません)。

クラスをドキュメント形式に一致させるか、クラスに一致するようにドキュメント形式を変更する必要があります。

于 2012-05-22T19:04:49.863 に答える