传入参数中为查询条件,根据目标数据库的类型,构造与其对应的查询语句,主要是针对时间格式进行特殊处理,如下:
/// <summary>
/// Where条件语句
/// </summary>
public class WhereCondition
{
/// <summary>
/// 起始时间
/// </summary>
[JsonProperty("from", NullValueHandling = NullValueHandling.Ignore)]
[JsonConverter(typeof(CustomizedDateTimeConverer))]
public DateTime FromTime { get; set; }
/// <summary>
/// 终止时间
/// </summary>
[JsonProperty("to", NullValueHandling = NullValueHandling.Ignore)]
[JsonConverter(typeof(CustomizedDateTimeConverer))]
public DateTime ToTime { get; set; }
/// <summary>
/// 案件号
/// </summary>
[JsonProperty("docunid", NullValueHandling = NullValueHandling.Ignore)]
public string DocUnid { get; set; }
/// <summary>
/// 项目名称
/// </summary>
[JsonProperty("xmmc", NullValueHandling = NullValueHandling.Ignore)]
public string ProjectName { get; set; }
/// <summary>
/// 权利人
/// </summary>
[JsonProperty("qlr", NullValueHandling = NullValueHandling.Ignore)]
public string Owner { get; set; }
public string ToWhereClause(WorkspaceType t)
{
Func<WorkspaceType, DateTime, string> FormatDateTime = (wsType, dateTime) =>
{
string result = "";
switch (wsType)
{
case WorkspaceType.Unknown:
break;
case WorkspaceType.SpatialDatabaseEngine:
result = string.Format("TO_DATE('{0}','YYYY-MM-DD HH24:MI:SS')", dateTime);
break;
case WorkspaceType.PersonalGeodatabase:
result = string.Format("#{0}#", dateTime.ToString("MM-dd-yyyy HH:mm:ss"));
break;
case WorkspaceType.FileGeodatabase:
result = string.Format("date '{0}'", dateTime.ToString("yyyy-MM-dd HH:mm:ss"));
break;
case WorkspaceType.Shapefile:
result = string.Format("date '{0} 00:00:00'", dateTime.ToString("yyyy-MM-dd"));
break;
default:
break;
}
return result;
};
Func<WorkspaceType, string, string> FormatFieldName = (wsType, fieldName) =>
{
string result = fieldName;
if (string.IsNullOrEmpty(fieldName))
return result;
switch (wsType)
{
case WorkspaceType.Unknown:
break;
case WorkspaceType.SpatialDatabaseEngine:
result = fieldName;
break;
case WorkspaceType.PersonalGeodatabase:
result = string.Format("[{0}]", fieldName.ToUpper());
break;
case WorkspaceType.FileGeodatabase:
result = fieldName;
break;
case WorkspaceType.Shapefile:
result = string.Format("\"{0}\"", fieldName.ToUpper());
break;
default:
break;
}
return result;
};
string s = "";
List<string> ls = new List<string>();
if (FromTime < ToTime)
{
ls.Add(string.Format("{0} >= {1}", FormatFieldName(t, "FROMTIME"), FormatDateTime(t, FromTime)));
ls.Add(string.Format("{0} <= {1}", FormatFieldName(t, "TOTIME"), FormatDateTime(t, ToTime)));
}
if (!string.IsNullOrEmpty(DocUnid))
ls.Add(string.Format("{0} = '{1}'", FormatFieldName(t, "DOCUNID"), DocUnid));
if (!string.IsNullOrEmpty(ProjectName))
ls.Add(string.Format("{0} = '{1}'", FormatFieldName(t, "XMMC"), ProjectName));
if (!string.IsNullOrEmpty(Owner))
ls.Add(string.Format("{0} = '{1}'", FormatFieldName(t, "QLR"), Owner));
int nCount = ls.Count;
if (1 == nCount && !string.IsNullOrEmpty(ls[0]))
s = ls[0];
else if(1<nCount)
s = string.Join(" AND ", ls.ToArray());
return s;
}
}