我有以下代码工作:
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)。