Дерево выражений: доступ к конкретному элементу IDictionary без использования «Item» - PullRequest
0 голосов
/ 10 октября 2018

Учитывая класс с членом 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"),
    }
}
...