SqlServer SqlFunc.JsonField

This commit is contained in:
sunkaixuan
2022-09-26 23:23:28 +08:00
parent d73495edc7
commit bb32ff6e08
2 changed files with 34 additions and 1 deletions

View File

@@ -1,4 +1,5 @@
using System;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -16,6 +17,7 @@ namespace OrmTest
Db.DbMaintenance.TruncateTable<UnitJsonTest>();
Db.Insertable(new UnitJsonTest() { Order = new Order { Id = 1, Name = "order1" } }).ExecuteCommand();
var list = Db.Queryable<UnitJsonTest>().ToList();
var json = Db.Queryable<UnitJsonTest>().Select(it => SqlFunc.JsonField(it.Order, "Name")).ToList();
UValidate.Check("order1", list.First().Order.Name, "Json");
Db.Updateable(new UnitJsonTest() { Id = 1, Order = new Order { Id = 2, Name = "order2" } }).ExecuteCommand();
list = Db.Queryable<UnitJsonTest>().ToList();

View File

@@ -54,5 +54,36 @@ namespace SqlSugar
return string.Format("( {0}<>'' AND {0} IS NOT NULL )", parameter.MemberName);
}
}
public override string JsonField(MethodCallExpressionModel model)
{
var parameter = model.Args[0];
var parameter1 = model.Args[1];
//var parameter2 = model.Args[2];
//var parameter3= model.Args[3];
var result = GetJson(parameter.MemberName, parameter1.MemberName, model.Args.Count() == 2);
if (model.Args.Count > 2)
{
result = GetJson(result, model.Args[2].MemberName, model.Args.Count() == 3);
}
if (model.Args.Count > 3)
{
result = GetJson(result, model.Args[3].MemberName, model.Args.Count() == 4);
}
if (model.Args.Count > 4)
{
result = GetJson(result, model.Args[4].MemberName, model.Args.Count() == 5);
}
if (model.Args.Count > 5)
{
result = GetJson(result, model.Args[5].MemberName, model.Args.Count() == 6);
}
return result;
}
private string GetJson(object memberName1, object memberName2, bool isLast)
{
return $"JSON_VALUE({memberName1}, '$.'+"+memberName2+")";
}
}
}