mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-08-23 13:06:50 +08:00
Add CSharpTypeName to ConditionalModel
This commit is contained in:
parent
306e7792b1
commit
8cfdaa987f
@ -94,6 +94,7 @@
|
||||
<Compile Include="Models\OrderItem.cs" />
|
||||
<Compile Include="Demo\Demo0_SqlSugarClient.cs" />
|
||||
<Compile Include="Models\ViewOrder.cs" />
|
||||
<Compile Include="UnitTest\Models\Order.cs" />
|
||||
<Compile Include="UnitTest\Models\TestModel.cs" />
|
||||
<Compile Include="UnitTest\UCustom01.cs" />
|
||||
<Compile Include="UnitTest\UCustom02.cs" />
|
||||
|
18
Src/Asp.Net/SqlServerTest/UnitTest/Models/Order.cs
Normal file
18
Src/Asp.Net/SqlServerTest/UnitTest/Models/Order.cs
Normal file
@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace OrmTest.UnitTest.Models
|
||||
{
|
||||
[SqlSugar.SugarTable("UnitMyOrder")]
|
||||
public class MYOrder
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
[SqlSugar.SugarColumn(Length = 18, DecimalDigits = 4)]
|
||||
public decimal Price { get; set; }
|
||||
|
||||
}
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
using SqlSugar;
|
||||
using OrmTest.UnitTest.Models;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -17,6 +18,27 @@ namespace OrmTest
|
||||
var data = db.GetSimpleClient<Order>().GetById(id);
|
||||
var x=db.Storageable(data).WhereColumns(it=>it.Price).ToStorage();
|
||||
Check.Exception(x.UpdateList.Count == 0, "unit error");
|
||||
|
||||
|
||||
|
||||
|
||||
db.CodeFirst.InitTables<MYOrder>();//建表
|
||||
|
||||
List<MYOrder> orders = new List<MYOrder>
|
||||
{
|
||||
new MYOrder
|
||||
{
|
||||
Name = "123",
|
||||
Price =Convert.ToDecimal(10)
|
||||
}
|
||||
};
|
||||
|
||||
var x1 = db.Storageable(orders).WhereColumns(m => m.Price).ToStorage();
|
||||
Console.WriteLine("insert:" + x1.InsertList.Count);
|
||||
Console.WriteLine("update:" + x1.UpdateList.Count);
|
||||
Console.WriteLine("------------");
|
||||
x1.AsInsertable.ExecuteCommand();
|
||||
Check.Exception( x1.AsUpdateable.ExecuteCommand()==0,"unit errors");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -205,7 +205,12 @@ namespace SqlSugar
|
||||
}
|
||||
else if (type.IsIn(typeof(decimal), typeof(double)))
|
||||
{
|
||||
return value;
|
||||
Expression<Func<SingleColumnEntity<object>, object>> exp = it => Convert.ToDecimal(it.ColumnName);
|
||||
var result = queryBuilder.GetExpressionValue(exp, ResolveExpressType.WhereSingle).GetResultString();
|
||||
result = Regex.Replace(result, @"\[ColumnName\]", formatBuilder.FormatValue(value) + "", RegexOptions.IgnoreCase);
|
||||
result = Regex.Replace(result, @"\`ColumnName\`", formatBuilder.FormatValue(value) + "", RegexOptions.IgnoreCase);
|
||||
result = Regex.Replace(result, @"""ColumnName""", formatBuilder.FormatValue(value) + "", RegexOptions.IgnoreCase);
|
||||
return result;
|
||||
}
|
||||
else if (type.IsIn(typeof(DateTime)))
|
||||
{
|
||||
|
@ -221,6 +221,7 @@ namespace SqlSugar
|
||||
{
|
||||
FieldName = item.DbColumnName,
|
||||
ConditionalType = ConditionalType.Equal,
|
||||
CSharpTypeName=UtilMethods.GetTypeName(value),
|
||||
FieldValue = value + "",
|
||||
FieldValueConvertFunc=this.Context.CurrentConnectionConfig.DbType==DbType.PostgreSQL?
|
||||
UtilMethods.GetTypeConvert(value):null
|
||||
|
@ -363,9 +363,17 @@ namespace SqlSugar
|
||||
private static object GetFieldValue(ConditionalModel item)
|
||||
{
|
||||
if (item.FieldValueConvertFunc != null)
|
||||
{
|
||||
return item.FieldValueConvertFunc(item.FieldValue);
|
||||
}
|
||||
else if (item.CSharpTypeName.HasValue())
|
||||
{
|
||||
return UtilMethods.ConvertDataByTypeName(item.CSharpTypeName,item.FieldValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
return item.FieldValue;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
@ -24,6 +24,7 @@ namespace SqlSugar
|
||||
}
|
||||
public string FieldName { get; set; }
|
||||
public string FieldValue { get; set; }
|
||||
public string CSharpTypeName { get; set; }
|
||||
public ConditionalType ConditionalType { get; set; }
|
||||
[Newtonsoft.Json.JsonIgnoreAttribute]
|
||||
public Func<string,object> FieldValueConvertFunc { get; set; }
|
||||
|
@ -38,10 +38,27 @@ namespace SqlSugar
|
||||
var list = Database.Where(it=>true);
|
||||
foreach (var pk in PkFields)
|
||||
{
|
||||
list = list.Where(it => it.GetType().GetProperty(pk).GetValue(it, null).ObjToString() == Item.GetType().GetProperty(pk).GetValue(Item, null).ObjToString());
|
||||
list = list.Where(it =>IsEquals(it, pk));
|
||||
}
|
||||
return list.Any();
|
||||
}
|
||||
|
||||
private bool IsEquals(T it, string pk)
|
||||
{
|
||||
var leftValue = it.GetType().GetProperty(pk).GetValue(it, null);
|
||||
var rightValue = Item.GetType().GetProperty(pk).GetValue(Item, null);
|
||||
var left = leftValue.ObjToString();
|
||||
var rigth = rightValue.ObjToString();
|
||||
if (it.GetType().GetProperty(pk).PropertyType == UtilConstants.DecType)
|
||||
{
|
||||
return Convert.ToDecimal(leftValue) == Convert.ToDecimal(rightValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
return left == rigth;
|
||||
}
|
||||
}
|
||||
|
||||
public bool NotAny()
|
||||
{
|
||||
return !Any();
|
||||
|
@ -286,6 +286,18 @@ namespace SqlSugar
|
||||
return null;
|
||||
}
|
||||
|
||||
internal static string GetTypeName(object value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
return value.GetType().Name;
|
||||
}
|
||||
}
|
||||
|
||||
internal static string GetParenthesesValue(string dbTypeName)
|
||||
{
|
||||
if (Regex.IsMatch(dbTypeName, @"\(.+\)"))
|
||||
@ -438,5 +450,44 @@ namespace SqlSugar
|
||||
}
|
||||
return dic;
|
||||
}
|
||||
public static object ConvertDataByTypeName(string ctypename,string value)
|
||||
{
|
||||
var item = new ConditionalModel() {
|
||||
CSharpTypeName = ctypename,
|
||||
FieldValue = value
|
||||
};
|
||||
if (item.CSharpTypeName.EqualCase(UtilConstants.DecType.Name))
|
||||
{
|
||||
return Convert.ToDecimal(item.FieldValue);
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase(UtilConstants.DobType.Name))
|
||||
{
|
||||
return Convert.ToDouble(item.FieldValue);
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase(UtilConstants.DateType.Name))
|
||||
{
|
||||
return Convert.ToDateTime(item.FieldValue);
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase(UtilConstants.IntType.Name))
|
||||
{
|
||||
return Convert.ToInt32(item.FieldValue);
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase(UtilConstants.LongType.Name))
|
||||
{
|
||||
return Convert.ToInt64(item.FieldValue);
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase(UtilConstants.ShortType.Name))
|
||||
{
|
||||
return Convert.ToInt16(item.FieldValue);
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase(UtilConstants.DateTimeOffsetType.Name))
|
||||
{
|
||||
return UtilMethods.GetDateTimeOffsetByDateTime(Convert.ToDateTime(item.FieldValue));
|
||||
}
|
||||
else
|
||||
{
|
||||
return item.FieldValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user