Самое простое решение - посмотреть на трассировку стека и полностью удалить каждую явную ссылку на свойство.
public String Name
{
get { return this.name; }
set
{
if (value != this.name)
{
this.RaisePropertyChanging();
this.name = value;
this.RaisePropertyChanged();
}
}
}
private String name = null;
private void RaisePropertyChanged()
{
String propertyName =
new StackTrace().GetFrame(1).GetMethod().Name.SubString(4);
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
handler(new PropertyChangedEventArgs(propertyName));
}
}
Код выводит имя свойства через трассировку стека из метода календаря - это метод установки свойств с именем set_<PropertyName>
. Если компилятор больше не следует этому соглашению об именах, код прерывается.
Другим решением является получение имени свойства из лямбда-выражения.
public static String GetPropertyNameFromLambdaExpression<TObject, TProperty>(
Expression<Func<TObject, TProperty>> expression)
{
return ((MemberExpression)expression.Body).Member.Name;
}
Например
GetPropertyNameFromLambdaExpression<String, Int32>(s => s.Length)
вернет «Length
», как ожидалось. Производственная версия кода действительно требует дополнительных проверок и лучшей интеграции в остальную часть кода. Например, можно использовать вывод типа для общих аргументов.
UPDATE
И есть третье решение - вы можете использовать MethodBase.GetCurrentMethod()
внутри свойства getter или setter для получения имя метода setter или getter.
public String Name
{
get { return this.name; }
set
{
if (value != this.name)
{
String propertyName = MethodBase.GetCurentMethod().Name.SubString(4);
this.RaisePropertyChanging(propertyName);
this.name = value;
this.RaisePropertyChanged(propertyName);
}
}
}
private String name = null;
Ваша структура запроса mgo
в порядке, проблема в названии поля count
. Модель ожидает Value
:
var result []struct {
Status string `bson:"_id"`
Value int
}
Так что измените стадию $group
на следующую:
grp := bson.M{
"$group": bson.M{
"_id": "$status",
"value": bson.M{ // Note lowercased "value"!
"$sum": 1,
},
},
}
И это должно сработать. Или измените модель, если вы можете:
var result []struct {
Status string `bson:"_id"`
Value int `bson:"count"`
}
Только один из них должен быть изменен, чтобы быть согласованным с другим.
И последнее: если вы используете Query.One()
, то result
не должен быть срезом (One()
ожидает только один документ).
Используйте тип среза для result
, если вы используете, например, Query.All()
.
Поэтому, если вы собираетесь использовать Query.One()
, используйте результат:
var result struct {
Status string `bson:"_id"`
Value int `bson:"count"`
}
Также Query.One()
и Query.All()
возвращают ошибку, проверьте ее!