動的 linq ライブラリを使用して動的クエリ ビルダーを構築しています。これまでのところ、ブール値、数値、テキストでは問題なく動作しますが、日付では機能しません。
日付が正常に機能するには、どのような形式が必要なのだろうか。
これは、sb.ToString が返すものを実行するコードです。
private string BuildQuery()
{
var sb = new StringBuilder();
//var list = RequestBaseBL.GetRequestByCustomQuery("RequestNumber == \"12\"");
#region 1st ROW of the QUERY
if (ColumnType(DdlColumn1.SelectedValue) == "Text")
{
if(DdlOperator1.SelectedValue == "==")
{
sb.Append(DdlColumn1.SelectedValue);
sb.Append(DdlOperator1.SelectedValue);
sb.Append("\"" + TxtValue1.Text + "\"");
}
if (DdlOperator1.SelectedValue == "<>")
{
sb.Append(DdlColumn1.SelectedValue);
sb.Append(DdlOperator1.SelectedValue);
sb.Append("\"" + TxtValue1.Text + "\"");
}
if (DdlOperator1.SelectedValue == "LIKE")
{
sb.Append(string.Format("{0}.Contains(\"{1}\")", DdlColumn1.SelectedValue, TxtValue1.Text));
}
if (DdlOperator1.SelectedValue == "NOT LIKE")
{
sb.Append(string.Format("!{0}.Contains(\"{1}\")", DdlColumn1.SelectedValue, TxtValue1.Text));
}
}
if (ColumnType(DdlColumn1.SelectedValue) == "Number")
{
sb.Append(DdlColumn1.SelectedValue);
sb.Append(DdlOperator1.SelectedValue);
sb.Append(TxtValue1.Text);
}
if (ColumnType(DdlColumn1.SelectedValue) == "Date")
{
sb.Append(DdlColumn1.SelectedValue);
sb.Append(DdlOperator1.SelectedValue);
sb.Append(TxtValue1.Text);
}
if (ColumnType(DdlColumn1.SelectedValue) == "Bool")
{
sb.Append(DdlColumn1.SelectedValue);
sb.Append(DdlOperator1.SelectedValue);
sb.Append(TxtValue1.Text);
}
#endregion
return sb.ToString();
}
string strSql = BuildQuery();
try
{
var list = RequestBaseBL.GetRequestByCustomQuery(strSql, DdlRequestType.SelectedValue).ToList();
private static void AddDateOperatorsToList(Dictionary<string, string> operators)
{
operators.Add("=", "Equals");
operators.Add("<>", "Not Equals");
operators.Add(">", "Greater than");
operators.Add(">=", "Greater or equal than");
operators.Add("<", "Less than");
operators.Add("<=", "Less or equal than");
}
更新 1:
エラー: 演算子 '=' は、オペランドの型 'DateTime' および 'Int32' と互換性がありません
sb.toString()
? sb.ToString() "RequestDate=12/12/2015"
更新 2:
アップデート 2 のエラー:
タイプ 'DateTime' に適用可能なメソッド 'Parse' が存在しません
if (ColumnType(DdlColumn1.SelectedValue) == "Date")
{
sb.AppendFormat("DateTime.Parse({0})", DdlColumn1.SelectedValue);
var str = string.Format("{0} {1} {2}", DdlColumn1.SelectedValue, DdlOperator1.SelectedValue,
DateTime.Parse(TxtValue1.Text));
//sb.Append(DdlColumn1.SelectedValue);
//sb.Append(DdlOperator1.SelectedValue);
//sb.Append(TxtValue1.Text);
sb.Append(str);
}
更新 3:
どちらも機能しませんでした
if (ColumnType(DdlColumn1.SelectedValue) == "Date")
{
var date = DateTime.Parse(TxtValue1.Text);
sb.Append(DdlColumn1.SelectedValue);
sb.Append(DdlOperator1.SelectedValue);
sb.Append("\"" + date.ToUniversalTime() + "\"");
//sb.Append(date.ToUniversalTime());
}