次のコードを実行すると、「タイプ 'DateTime'に該当するメソッド 'Parse'が存在しません」という例外が発生します。
var truncatedData = new object();
string TableName = "Products";
string ColumnName = cboAdvSearchCol1.Text.ToString();
var rawData = twr.GetType().GetProperty(TableName).GetValue(twr, null);
string query = ColumnName + ">= DateTime.Parse(" + txtAdvSearchVal1.Text +") && " + ColumnName + "< DateTime.Parse("
+ txtAdvSearchVal1.Text +").AddDays(1)";
truncatedData = ((IQueryable<object>)rawData).Where(query).ToList();//I get exception here
デバッグ中に、(文字列)クエリの値を"RUNTIMESTAMP>= DateTime.Parse(7/30/2015) && RUNTIMESTAMP< DateTime.Parse(7/30/2015).AddDays(1)"
として取得します。動的linqを使用しています。
動的式に対して次のコードを生成します: DateTime.Parse(7/30/2015)
。しかし、それはあなたが期待していることをしていません。
日付、発現周囲ない引用符がないので7 / 30 / 2015
、このような整数除算として解釈されます:
7 / 30 / 2015 = (7 / 30) / 2015 = 0 / 2015 = 0
だから、結果は同じですDateTime.Parse(0)
が、 DateTime.Parse
のみ受け付けstring
引数として。 int
を受け入れるメソッドが見つからないため、該当するメソッドがないという例外が発生します。
それを呼び出す正しい方法は次のようになります:
string query = ColumnName + ">= DateTime.Parse(\"" + txtAdvSearchVal1.Text +"\") && "
+ ColumnName + "< DateTime.Parse(\"" + txtAdvSearchVal1.Text +"\").AddDays(1)";
日付を文字列として使用するための余分な"
記号に注意してください。