c# - Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions -
error line;
modelmetadata metadata = modelmetadata.fromlambdaexpression<t, object>(columnproperty, phtml.viewdata); model
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}, this line work new column<lsdatamodels.menuauths> { columnproperty = c => c.menuid } line have error new column<lsdatamodels.menuauths> { columnproperty = c => c.allownew},
i can try property type change bool? , bool , nulable<bool> error has been continue. remove [bsondefaultvalue(false)] attribute nothing change.
what can do?
edit: error templates can used field access, property access, single-dimension array index, or single-parameter custom indexer expressions.
i find solition problem.
i use propertyinfo
i add exdent method on 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 memberexpression; } else if (expression.body.nodetype == expressiontype.memberaccess) { memberexpression = expression.body memberexpression; } if (memberexpression == null) { throw new argumentexception("not member access", "expression"); } return memberexpression.member propertyinfo; } and change line
modelmetadata metadata = modelmetadata.fromlambdaexpression<t, object>(columnproperty, phtml.viewdata); to
propertyinfo pi = fieldproperty.getproperty<t>(); i can access need attributes , properties on propertyinfo
Comments
Post a Comment