如果我有產品。訪問成員表達式的值
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