0
if else条件の外で式呼び出しを初期化したいとします。私は式の本体を生成するためにそれを使用する必要があります。なぜなら、私は2つの異なる型、つまりintとintのデータベースから来ているからです。私のコードは以下の通りです。 toStringオブジェクトをインスタンス化するときにエラーが発生します。System.Linq.ExpressionでExpression.Callオブジェクトを初期化する方法C#
var parameterExp = Expression.Parameter(typeof(T), "type");
var propertyExp = Expression.Property(parameterExp, propertyName);
MethodInfo method = typeof(string).GetMethod(methodType, new[] { typeof(string) });
var searchValue = Expression.Constant(propertyValue.ToLower(), typeof(string));
var toString = new MethodCallExpression();
if (propertyName == nameof(CustomerListDto.Id))
{
toString = Expression.Call(propertyExp, typeof(int).GetMethod("ToString", System.Type.EmptyTypes));
}
else
{
toString = Expression.Call(propertyExp, typeof(int?).GetMethod("ToString", System.Type.EmptyTypes));
}
var body = Expression.Call(toString, method, searchValue);
return Expression.Lambda<Func<T, bool>>(body, parameterExp);
ExpressionCallの初期化方法を正確にはわかりません。これは私が知りたいことです。現在、 "MethodCallExpressionには0引数を取るコンストラクタが含まれていません"というエラーが表示されています。私は多くを検索しましたが、解決策を見つけることができませんでした。
"私はエラーが発生しています" - 何のエラー?それがコンパイル時エラーか例外かに関係なく、[mcve]に完全な結果を提供してください。 –
intの値はありますか?ただヌルである? –
@FilipCordas。それは価値を含んでいません。データ型はNullable Intです。 –