0

次のような式を作成しました。

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 :(

このタスクを達成する方法はありますか。私はこれを式の共通の実装にするために作成しています。おそらく、このための関数を作成し、文字列を受け入れるだけです。ありがとう!

4

2 に答える 2

4

コードの問題x.GetType().GetProperty("CustomerName").Nameは、プロパティの値ではなくプロパティの名前を返すことです。

次のコードが必要です。

expression x => x.GetType().GetProperty("CustomerName")
                           .GetValue(x, null)
                           .ToString()
                           .StartsWith(comboParams.ParamValueText, true, null);
于 2012-10-12T05:14:48.070 に答える
1

問題は、GetProperty("CustomerName").Name が常に "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
于 2012-10-12T05:34:07.243 に答える