RicardoCosta Posted March 3, 2018 at 12:51 AM Report #609569 Posted March 3, 2018 at 12:51 AM Boas, Precisava de ajuda para algo que já me atormenta há algum tempo. Já perdi horas a pesquisar e trata-se realmente de algo que não encontro qualquer tipo de ajuda. Expressions é algo que sempre tive bastante duvidas. Muitas vezes faço helpers aos quais uso muitas vezes expressões. No exemplo seguinte, por exemplo estou a ir buscar o nome da propriedade que o utilizador escolheu. Como se trata apenas de uma unica proriedade, ao fazer um Cast para MemberExpression tenho depois acesso à propriedade "Member" que tem toda a informação da propriedade da entidade. @Html.DropdownFor(model => model.Id) public static MvcHtmlString DropdownFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> espression) { Expression body = espression.body; MemberExpression prop = (MemberExpression) body; var name = prop.Member.Name; ..... } No entanto, quando faço algo como no exemplo seguinte, não sei como ler as várias propriedades. Quando corro a aplicação em debug, ao analisar o body da expressão mostra uma propriedade chamada "Members" em que consigo ver todos as propriedades da expressão. Quando vejo no quick watch, vejo que está a inicializar algo deste genero "new NewExpressionProxy(body).Members" mas trata-se de uma classe protegida interna do linq. @Html.DropdownFor(model => new { model.Id, model.Name }) public static MvcHtmlString DropdownFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, object>> espression) { ..... } Em suma, o que preciso de fazer para ler a colecção de propriedades? Obrigado
Sonic Parks Posted November 30, 2020 at 08:31 PM Report #620508 Posted November 30, 2020 at 08:31 PM (edited) IList<MemberInfo> properties = (predicate.Body as System.Linq.Expressions.NewExpression).Members; Edited November 30, 2020 at 08:36 PM by Sonic Parks correção do tipo
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now