Si tengo un producto.Acceda al valor de una expresión miembro
var p = new Product { Price = 30 };
y tengo la siguiente consulta LINQ.
var q = repo.Products().Where(x=>x.Price == p.Price).ToList()
En un proveedor IQueryable, aparece un MemberExpression atrás para la p.Price que contiene una expresión constante, sin embargo, me parece que no puede obtener el valor "30" atrás de ella.
Actualización He intentado esto pero parece que no funciona.
var memberExpression = (MemberExpression)GetRootConstantExpression(m);
var fi = (PropertyInfo)memberExpression.Member;
var val = fi.GetValue(((ConstantExpression)memberExpression.Expression).Value, null);
Cheers.
Obtenga este error La expresión de tipo 'System.Double' no se puede usar para el tipo de retorno 'System.Object' cuando se resuelve en un doble en el ejemplo que utilicé – Schotime
Tuve que agregar: var expression = Expression.Convert (member, typeof (object)); en la primera línea de la función para corregir el error anterior con doble conversión! – Schotime
Ah sí, a veces me olvido de que tiene que ser explícito con los árboles de expresiones donde C# es implícito (como las conversiones). Me alegra que esto funcione para ti. –