我正在使用动态linq库构建一个动态查询生成器。 到目前为止,它的工作正常与布尔,数字和文字,但与日期。带日期字段的动态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:
错误是: 操作 '=' 与操作数类型的 '日期时间' 和 '的Int32'
的sb.toString()
不相容? sb.ToString() “RequestDate = 12/12/2015”
更新2:
更新2的错误:
'解析' 在类型 '日期时间'
存在没有适用的方法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:
没有工作eith呃
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());
}
请定义“不工作”。错误?或意外的结果? –
你可以发布什么sb.ToString()返回?另外,你添加的小小图片是不可读的。 –
请参阅更新1. –