Учитывая класс с членом IDictionary
public class A
{
...
[BsonElement("cli")]
public Guid ClientId { get; set; }
[BsonDictionaryOptions(DictionaryRepresentation.Document)]
[BsonElement("props")]
public IDictionary<string, object> Properties { get; set; }
...
}
Я пытаюсь построить дерево выражений для GroupBy специально для драйвера C # MongoDB.Например:
var test = baseQuery.GroupBy(x => new Tuple<Guid, object>(x.ClientId, x.Properties["Location"]));
Моя проблема заключается в отправке правильного выражения для x.Properties["Location"]
, приемлемого для Mongo.
Если я попытаюсь использовать PropertyIndexer, как описано в другом вопросе stackoverflow, который в основном испускает {x.Properties.Item["Location"]
, Монго будет жаловаться:
System.NotSupportedException: $project or $group does not support {document}{props}.Item["Location"].
Я подозреваю, что проблема заключается в дополнительном "Элементе" в выражении, поскольку я могу успешно выполнитьзапрос выше без отражения.
Как я могу получить доступ к Словарю как this[TKey]
, как указано в docs.microsoft.com через отражение?
Большое спасибо!
Обновление
Пример документа монго выглядит следующим образом
{
"_id" : ObjectId("5bad9a7b73d552637cc97b58"),
"cli" : NUUID("02c39a78-316a-4756-b88c-b8313f6ef252"),
...
"props" : {
"Phone" : NumberLong(442076),
"Location" : "North Ryde",
"Start" : ISODate("2018-09-01T03:19:16.000Z"),
}
}