Если вы сохраните свою карту классов в личном кабинете, например, так:
private static BsonClassMap<Thing> _thingClassMap = BsonClassMap.RegisterClassMap<Thing>();
...
вы можете извлечь имя элемента:
string elementName = _thingClassMap.GetMemberMap<string>(c => c.Foo).ElementName;
...
и тогда вы можете просто создать функцию, которая переносит строку, извлекающую имя элемента,
это все еще довольно раздражает, но это лучшее, что мы получили в данный момент, я думаю ..
private string GetTypeMemberName<T>(Expression<Func<Foo, T>> memberLambda)
{
return _classMap.GetMemberMap<T>(memberLambda).ElementName;
}
тогда вы можете просто получить имя элемента:
string elementName = GetTypeMemberName<string>(c => c.Foo);
Тогда, если вы реорганизовали свой код и позже переименовали свойство, оно также изменится в запросе.
Конечно, вы также можете просто использовать LINQ.