private object GetEntryValue(string propertyName)
 {
     var value = base[propertyName];
     if (value is IDictionary<string, object>)
         value = new DynamicODataEntry(value as IDictionary<string, object>);
     return value;
 }
            public override DynamicMetaObject BindGetMember(GetMemberBinder binder)
            {
                var odataEntry = base.Value as DynamicODataEntry;
                if (odataEntry.AsDictionary().ContainsKey(binder.Name))
                {
                    var value = odataEntry.AsDictionary()[binder.Name];
                    if (value is IDictionary<string, object>)
                        value = new DynamicODataEntry(value as IDictionary<string, object>);
                    Expression objectExpression = Expression.Constant(value);
                    if (value != null && value.GetType().IsValueType)
                    {
                        objectExpression = Expression.Convert(objectExpression, typeof(object));
                    }

                    return new DynamicMetaObject(
                        objectExpression, 
                        BindingRestrictions.GetTypeRestriction(Expression, LimitType));
                }
                return base.BindGetMember(binder);
            }
 internal DynamicEntryMetaObject(
     Expression parameter,
     DynamicODataEntry value)
     : base(parameter, BindingRestrictions.Empty, value)
 {
 }