mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-08-24 07:22:57 +08:00
Oracle Where(ConditionalModel ) DateType BUG
This commit is contained in:
parent
85a15a1404
commit
3790271db5
@ -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()
|
||||||
{
|
{
|
||||||
|
@ -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; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user