如果我有产品。访问成员表达式的值
var p = new Product { Price = 30 };
并且我有以下linq查询。
var q = repo.Products().Where(x=>x.Price == p.Price).ToList()
在一个IQueryable供应商,我得到一个MemberExpression回来含有常量表达式的p.Price,但我似乎无法得到值“30”,从回来。
更新 我试过这个,但它似乎没有工作。
var memberExpression = (MemberExpression)GetRootConstantExpression(m);
var fi = (PropertyInfo)memberExpression.Member;
var val = fi.GetValue(((ConstantExpression)memberExpression.Expression).Value, null);
干杯。
获取此错误类型为“System.Double”的表达式不能用于返回类型为“System.Object”的解析为double在我使用的例子中。 – Schotime 2010-04-11 13:12:16
不得不添加: var expression = Expression.Convert(member,typeof(object));在函数的第一行用双重转换修复上述错误! – Schotime 2010-04-11 14:23:58
啊,是的,我有时会忘记你必须明确C#隐含的表达式树(比如转换)。我很高兴这对你有用。 – 2010-04-11 18:18:30