Oracle Where(ConditionalModel ) DateType BUG

This commit is contained in:
sunkaixuan 2019-01-03 22:17:33 +08:00
parent 85a15a1404
commit 3790271db5
3 changed files with 63 additions and 20 deletions

View File

@ -1,5 +1,6 @@
using OrmTest.Demo; using OrmTest.Demo;
using OrmTest.Models; using OrmTest.Models;
using SqlSugar;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -16,6 +17,7 @@ namespace OrmTest.Demo
{ {
Where(); Where();
OrderBy(); OrderBy();
ConditionalModel();
} }
private static void Where() private static void Where()
@ -26,6 +28,33 @@ namespace OrmTest.Demo
var list = db.Queryable<Student>().Where("name=:name", new { name = value }).ToList(); var list = db.Queryable<Student>().Where("name=:name", new { name = value }).ToList();
//Nothing happened //Nothing happened
} }
private static void ConditionalModel()
{
var db = GetInstance();
List<IConditionalModel> conModels = new List<IConditionalModel>();
conModels.Add(new ConditionalModel() { FieldName = "createTime", ConditionalType = ConditionalType.Equal, FieldValue = DateTime.Now.ToString(), FieldValueConvertFunc=it=>Convert.ToDateTime(it) });
conModels.Add(new ConditionalModel() { FieldName = "createTime", ConditionalType = ConditionalType.GreaterThan, FieldValue = DateTime.Now.ToString(), FieldValueConvertFunc = it => Convert.ToDateTime(it) });
conModels.Add(new ConditionalModel() { FieldName = "createTime", ConditionalType = ConditionalType.GreaterThanOrEqual, FieldValue = DateTime.Now.ToString(), FieldValueConvertFunc = it => Convert.ToDateTime(it) });
conModels.Add(new ConditionalModel() { FieldName = "createTime", ConditionalType = ConditionalType.LessThan, FieldValue = DateTime.Now.ToString(), FieldValueConvertFunc = it => Convert.ToDateTime(it) });
conModels.Add(new ConditionalModel() { FieldName = "Student.id", ConditionalType = ConditionalType.LessThanOrEqual, FieldValue = "1" ,FieldValueConvertFunc= it=>Convert.ToInt32(it)});//id=1
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Like, FieldValue = "1" });// id like '%1%'
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.IsNullOrEmpty });
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.In, FieldValue = "1,2,3" });
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.NotIn, FieldValue = "1,2,3" });
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.NoEqual, FieldValue = "1,2,3" });
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.IsNot, FieldValue = null });// id is not null
conModels.Add(new ConditionalCollections()
{
ConditionalList = new List<KeyValuePair<WhereType, SqlSugar.ConditionalModel>>()// (id=1 or id=2 and id=1)
{
new KeyValuePair<WhereType, ConditionalModel>( WhereType.And ,new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "1" }),
new KeyValuePair<WhereType, ConditionalModel> (WhereType.Or,new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "2" }),
new KeyValuePair<WhereType, ConditionalModel> ( WhereType.And,new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "2" })
}
});
var student = db.Queryable<Student>().Where(conModels).ToList();
}
private static void OrderBy() private static void OrderBy()
{ {

View File

@ -22,5 +22,6 @@ namespace SqlSugar
public string FieldName { get; set; } public string FieldName { get; set; }
public string FieldValue { get; set; } public string FieldValue { get; set; }
public ConditionalType ConditionalType { get; set; } public ConditionalType ConditionalType { get; set; }
public Func<string,object> FieldValueConvertFunc { get; set; }
} }
} }

View File

@ -90,7 +90,7 @@ namespace SqlSugar
/// </summary> /// </summary>
/// <param name="reader"></param> /// <param name="reader"></param>
/// <returns></returns> /// <returns></returns>
public Dictionary<string, object> DataReaderToDictionary(IDataReader reader,Type type) public Dictionary<string, object> DataReaderToDictionary(IDataReader reader, Type type)
{ {
Dictionary<string, object> result = new Dictionary<string, object>(); Dictionary<string, object> result = new Dictionary<string, object>();
for (int i = 0; i < reader.FieldCount; i++) for (int i = 0; i < reader.FieldCount; i++)
@ -98,7 +98,7 @@ namespace SqlSugar
string name = reader.GetName(i); string name = reader.GetName(i);
try try
{ {
name = this.Context.EntityMaintenance.GetPropertyName(name,type); name = this.Context.EntityMaintenance.GetPropertyName(name, type);
var addItem = reader.GetValue(i); var addItem = reader.GetValue(i);
if (addItem == DBNull.Value) if (addItem == DBNull.Value)
addItem = null; addItem = null;
@ -129,7 +129,7 @@ namespace SqlSugar
{ {
while (reader.Read()) while (reader.Read())
{ {
var readerValues = DataReaderToDictionary(reader,tType); var readerValues = DataReaderToDictionary(reader, tType);
var result = new Dictionary<string, object>(); var result = new Dictionary<string, object>();
foreach (var item in classProperties) foreach (var item in classProperties)
{ {
@ -143,7 +143,7 @@ namespace SqlSugar
{ {
if (readerValues.Any(it => it.Key.Equals(name, StringComparison.CurrentCultureIgnoreCase))) if (readerValues.Any(it => it.Key.Equals(name, StringComparison.CurrentCultureIgnoreCase)))
{ {
var addValue = readerValues.ContainsKey(name) ? readerValues[name] : readerValues.First(it=>it.Key.Equals(name,StringComparison.CurrentCultureIgnoreCase)).Value; var addValue = readerValues.ContainsKey(name) ? readerValues[name] : readerValues.First(it => it.Key.Equals(name, StringComparison.CurrentCultureIgnoreCase)).Value;
if (addValue == DBNull.Value) if (addValue == DBNull.Value)
{ {
if (item.PropertyType.IsIn(UtilConstants.IntType, UtilConstants.DecType, UtilConstants.DobType, UtilConstants.ByteType)) if (item.PropertyType.IsIn(UtilConstants.IntType, UtilConstants.DecType, UtilConstants.DobType, UtilConstants.ByteType))
@ -207,13 +207,14 @@ namespace SqlSugar
else else
{ {
var key = typeName + "." + name; var key = typeName + "." + name;
var info = readerValues.Select(it=>it.Key).FirstOrDefault(it=>it.ToLower() == key.ToLower()); var info = readerValues.Select(it => it.Key).FirstOrDefault(it => it.ToLower() == key.ToLower());
if (info!=null) if (info != null)
{ {
var addItem = readerValues[info]; var addItem = readerValues[info];
if (addItem == DBNull.Value) if (addItem == DBNull.Value)
addItem = null; addItem = null;
if (prop.PropertyType == UtilConstants.IntType) { if (prop.PropertyType == UtilConstants.IntType)
{
addItem = addItem.ObjToInt(); addItem = addItem.ObjToInt();
} }
result.Add(name, addItem); result.Add(name, addItem);
@ -269,7 +270,7 @@ namespace SqlSugar
public SqlSugarClient CopyContext(bool isCopyEvents = false) public SqlSugarClient CopyContext(bool isCopyEvents = false)
{ {
var newClient = new SqlSugarClient(this.TranslateCopy(Context.CurrentConnectionConfig)); var newClient = new SqlSugarClient(this.TranslateCopy(Context.CurrentConnectionConfig));
newClient.CurrentConnectionConfig.ConfigureExternalServices=Context.CurrentConnectionConfig.ConfigureExternalServices; newClient.CurrentConnectionConfig.ConfigureExternalServices = Context.CurrentConnectionConfig.ConfigureExternalServices;
newClient.MappingColumns = this.TranslateCopy(Context.MappingColumns); newClient.MappingColumns = this.TranslateCopy(Context.MappingColumns);
newClient.MappingTables = this.TranslateCopy(Context.MappingTables); newClient.MappingTables = this.TranslateCopy(Context.MappingTables);
newClient.IgnoreColumns = this.TranslateCopy(Context.IgnoreColumns); newClient.IgnoreColumns = this.TranslateCopy(Context.IgnoreColumns);
@ -349,7 +350,7 @@ namespace SqlSugar
#endregion #endregion
#region Query #region Query
public KeyValuePair<string, SugarParameter[]> ConditionalModelToSql(List<IConditionalModel> models,int beginIndex=0) public KeyValuePair<string, SugarParameter[]> ConditionalModelToSql(List<IConditionalModel> models, int beginIndex = 0)
{ {
if (models.IsNullOrEmpty()) return new KeyValuePair<string, SugarParameter[]>(); if (models.IsNullOrEmpty()) return new KeyValuePair<string, SugarParameter[]>();
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
@ -360,21 +361,23 @@ namespace SqlSugar
if (model is ConditionalModel) if (model is ConditionalModel)
{ {
var item = model as ConditionalModel; var item = model as ConditionalModel;
var index = models.IndexOf(item)+ beginIndex; var index = models.IndexOf(item) + beginIndex;
var type = index == 0 ? "" : "AND"; var type = index == 0 ? "" : "AND";
if (beginIndex > 0) { if (beginIndex > 0)
{
type = null; type = null;
} }
string temp = " {0} {1} {2} {3} "; string temp = " {0} {1} {2} {3} ";
string parameterName = string.Format("{0}Conditional{1}{2}", sqlBuilder.SqlParameterKeyWord, item.FieldName, index); string parameterName = string.Format("{0}Conditional{1}{2}", sqlBuilder.SqlParameterKeyWord, item.FieldName, index);
if (parameterName.Contains(".")) { if (parameterName.Contains("."))
{
parameterName = parameterName.Replace(".", "_"); parameterName = parameterName.Replace(".", "_");
} }
switch (item.ConditionalType) switch (item.ConditionalType)
{ {
case ConditionalType.Equal: case ConditionalType.Equal:
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "=", parameterName); builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "=", parameterName);
parameters.Add(new SugarParameter(parameterName, item.FieldValue)); parameters.Add(new SugarParameter(parameterName, GetFieldValue(item)));
break; break;
case ConditionalType.Like: case ConditionalType.Like:
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "LIKE", parameterName); builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "LIKE", parameterName);
@ -382,19 +385,19 @@ namespace SqlSugar
break; break;
case ConditionalType.GreaterThan: case ConditionalType.GreaterThan:
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), ">", parameterName); builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), ">", parameterName);
parameters.Add(new SugarParameter(parameterName, item.FieldValue)); parameters.Add(new SugarParameter(parameterName, GetFieldValue(item)));
break; break;
case ConditionalType.GreaterThanOrEqual: case ConditionalType.GreaterThanOrEqual:
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), ">=", parameterName); builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), ">=", parameterName);
parameters.Add(new SugarParameter(parameterName, item.FieldValue)); parameters.Add(new SugarParameter(parameterName, GetFieldValue(item)));
break; break;
case ConditionalType.LessThan: case ConditionalType.LessThan:
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "<", parameterName); builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "<", parameterName);
parameters.Add(new SugarParameter(parameterName, item.FieldValue)); parameters.Add(new SugarParameter(parameterName, GetFieldValue(item)));
break; break;
case ConditionalType.LessThanOrEqual: case ConditionalType.LessThanOrEqual:
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "<=", parameterName); builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "<=", parameterName);
parameters.Add(new SugarParameter(parameterName, item.FieldValue)); parameters.Add(new SugarParameter(parameterName, GetFieldValue(item)));
break; break;
case ConditionalType.In: case ConditionalType.In:
if (item.FieldValue == null) item.FieldValue = string.Empty; if (item.FieldValue == null) item.FieldValue = string.Empty;
@ -459,8 +462,9 @@ namespace SqlSugar
} }
List<IConditionalModel> conModels = new List<IConditionalModel>(); List<IConditionalModel> conModels = new List<IConditionalModel>();
conModels.Add(con.Value); conModels.Add(con.Value);
var childSqlInfo = ConditionalModelToSql(conModels,1000*(1+index)); var childSqlInfo = ConditionalModelToSql(conModels, 1000 * (1 + index));
if (!isFirst) { if (!isFirst)
{
builder.AppendFormat(" {0} ", con.Key.ToString().ToUpper()); builder.AppendFormat(" {0} ", con.Key.ToString().ToUpper());
} }
@ -470,7 +474,8 @@ namespace SqlSugar
{ {
builder.Append(" ) "); builder.Append(" ) ");
} }
else { else
{
} }
} }
@ -479,6 +484,14 @@ namespace SqlSugar
} }
return new KeyValuePair<string, SugarParameter[]>(builder.ToString(), parameters.ToArray()); return new KeyValuePair<string, SugarParameter[]>(builder.ToString(), parameters.ToArray());
} }
private static object GetFieldValue(ConditionalModel item)
{
if (item.FieldValueConvertFunc != null)
return item.FieldValueConvertFunc(item.FieldValue);
else
return item.FieldValue;
}
#endregion #endregion
} }
} }