我创建了一个表达式:
expression = x => x.CustomerName.StartsWith(comboParams.ParamValueText, true, null);
我想访问客户名称,如下所示:
expression = x => x["CustomerName"] and access the StartsWith function
我已经尝试了诸如
之类的代码expression x => x.GetType().GetProperty("CustomerName").Name.StartsWith(comboParams.ParamValueText, true, null); --> it doesn't seem to work :(
有没有办法完成这项任务。我正在使这个表达式有一个共同的实现,也许我会为此创建一个函数并接受字符串。谢谢!
答案 0 :(得分:4)
您的代码存在的问题是x.GetType().GetProperty("CustomerName").Name
将返回属性的名称而不是其值。
您需要以下代码。
expression x => x.GetType().GetProperty("CustomerName")
.GetValue(x, null)
.ToString()
.StartsWith(comboParams.ParamValueText, true, null);
答案 1 :(得分:1)
我认为问题在于GetProperty(“CustomerName”)。名称将始终返回“CustomerName”,即它是属性的名称。
尝试这样的事情(我已经重构了一点,作为一个独立的例子):
class Customer { public string CustomerName { get; set; } }
var customer = new Customer { CustomerName = "bob" };
Expression<Func<Customer, string, bool>> expression = (c, s) => c.GetType().GetProperty("CustomerName").GetGetMethod().Invoke(c, null).ToString().StartsWith(s, true, null);
var startsResult = expression.Compile()(customer, "b"); // returns true
startsResult = expression.Compile()(customer, "x"); // returns false