tengo las clases:
public class Whole { public ObjectId Id { get; set; } public string NeededField { get; set; } public List<Detail> Details { get; set; } public string SomeUnnecesaryField { get; set; } } public class Detail { public string NeededField { get; set; } public string NotNeededField { get; set; } } [BsonNoId] [BsonIgnoreExtraElements] public class MyNeededInformations { public string NeededField { get; set; } [BsonElement("Details.NeededField")] public List<string> DetailsNeededFields { get; set; } }Y yo tratando de obtenerlo con proyección:
var filter = someFilter; var projection = Builders<Whole>.Projection .Include(w => w.NeededField) .Include(w => w.Details) .Exclude("_id"); return Collection .Find(filter) .Project(projection) .As<MyNeededInformations>() .ToList(); Y recibo DetailsNeededFields como una lista vacía cada vez. Quiero tener una lista de cadenas como con aggeregate estándar:
db.collection.aggregate([ {$match: someFilter}, {$project: {"_id": 0, "NeededField": 1, "DetailsNeededFields": "$Details.NeededField"}} ])se puede lograr fácilmente con la interfaz AsQueryable así:
var results = await collection .AsQueryable() .Where(_ => true) .Select(w => new MyNeededInformations { NeededField = w.NeededField, DetailsNeededFields = (List<string>)w.Details.Select(d => d.NeededField) }) .ToListAsync();