0

错误行;

ModelMetadata metadata = ModelMetadata.FromLambdaExpression<T, object>(ColumnProperty, pHtml.ViewData);

模型

public class MenuAuths : EntityBase
{
[BsonIgnoreIfNull]
        [BsonRepresentation(BsonType.ObjectId)]
        public string MenuId { get; set; }
[BsonDefaultValue(false)]
        public bool AllowNew { get; set; }
}

cshtml;

new Column<LsDataModels.MenuAuths> { ColumnProperty = c => c.MenuId },
new Column<LsDataModels.MenuAuths> { ColumnProperty = c => c.AllowNew},

这条线工作 new Column<LsDataModels.MenuAuths> { ColumnProperty = c => c.MenuId } ,但这条线有错误 new Column<LsDataModels.MenuAuths> { ColumnProperty = c => c.AllowNew},

我可以尝试更改属性类型bool?boolNulable<bool>错误一直在继续。另外我删除[BsonDefaultValue(false)]属性没有任何变化。

我能做些什么?

编辑:错误是模板只能用于字段访问、属性访问、单维数组索引或单参数自定义索引器表达式。

4

1 回答 1

0

我找到了解决这个问题的方法。

我用PropertyInfo

我在上添加扩展方法Expression<Func<T, dynamic>>

public static PropertyInfo GetProperty<T>(this Expression<Func<T, dynamic>> expression)
        {
            MemberExpression memberExpression = null;

            if (expression.Body.NodeType == ExpressionType.Convert)
            {
                memberExpression = ((UnaryExpression)expression.Body).Operand as MemberExpression;
            }
            else if (expression.Body.NodeType == ExpressionType.MemberAccess)
            {
                memberExpression = expression.Body as MemberExpression;
            }

            if (memberExpression == null)
            {
                throw new ArgumentException("Not a member access", "expression");
            }

            return memberExpression.Member as PropertyInfo;
        }

并更改此行

ModelMetadata metadata = ModelMetadata.FromLambdaExpression<T, object>(ColumnProperty, pHtml.ViewData);

PropertyInfo pi = FieldProperty.GetProperty<T>();

我可以访问需要的所有属性和属性PropertyInfo

于 2013-05-15T10:09:11.857 回答