Ich versuche eine MongoDB-Sammlung mit einem offiziellen C# -Treiber abzufragen. Hier ist die Objektstruktur die ich angelegt habe:C# MongoDB LINQ: Verschachtelte Liste kann nicht abgefragt werden
IMongoDatabase db = mongoClient.GetDatabase("appdb");
IMongoCollection<MusicFile> musicfiles = db.GetCollection<MusicFile>("files");
public class MusicFile
{
public ObjectId Id { get; set; }
public string Name { get; set; }
public IList<Comment> Comments { get; set; }
}
public class Comment
{
public string Text { get; set; }
}
Dies ist die Abfrage Ich versuche, alle MusicFile Objekte zu erhalten, die einen Kommentar Objekt mit Eigenschafts Text enthält = „Comment1“:
musicfiles.AsQueryable().Where(f => f.Comments != null && f.Comments.Any(c => c.Text == "Comment1")).ToList();
I kann diese Abfrage nicht funktionieren, es gibt immer eine leere Liste zurück. Ich habe auch versucht diese, die auch nicht funktioniert hat:
musicfiles.Find(f => f.Comments.Any(c => c.Text == "Comment1")).ToList()
Aber wenn ich die komplette Sammlung Speicher zu erhalten, ist die Abfrage funktioniert:
musicfiles.Find(FilterDefinition<MusicFile>.Empty).ToList().Where(f => f.Comments != null && f.Comments.Any(c => c.Text == "Comment1")).ToList();
Dies scheint ein sehr ineffizienter Weg zur Abfrage . Irgendwelche Vorschläge?
Ich bin gerade in einem Bus, so kann ich keine Antwort liefern, aber ich habe festgestellt, dass abfragbare kann nicht komplizierter Abfragen konvertieren. Ich würde empfehlen, den Filter Builder und ElemMatch zu verwenden. – john