c# Lambda Expression - Get property value from string
本问题已经有最佳答案,请猛点这里访问。
考虑以下lambda表达式:
ZZU1我需要转换上面的代码,类似于:
ZZU1这里我添加了一个虚拟方法EDOCX1来解释这个需求。在上面的代码中,属性应该在运行时解析。换句话说,我需要从sting值(如EDOCX1)访问该属性。
我该怎么做?
1 2 3 4 5 6 7 8 9 10 11 | var parameterExp = Expression.Parameter(typeof(Product),"type"); var propertyExp = Expression.Property(parameterExp, propertyName); MethodInfo method = typeof(string).GetMethod("Contains", new[] { typeof(string) }); var someValue = Expression.Constant(propertyValue, typeof(string)); var containsMethodExp = Expression.Call(propertyExp, method, someValue); Expression<Func<Product, bool>> predicate = Expression.Lambda<Func<T, bool>> (containsMethodExp, parameterExp); var query = query.Where(predicate); |
您可以使用此扩展方法:
1 2 3 4 | public static T GetPropertyValue<T>(this Product product, string propName) { return (T)typeof(Product).GetProperty(propName).GetValue(product, null); } |
号
然后:
1 | IQueryable<Product> query = query.Where(x => x.GetPropertyValue<string>("ProductName").Contains("P100")); |
注意,这不适用于实体框架来查询数据库,但是由于您没有将问题标记为实体框架,所以我不假设您正在使用它。