109 lines
4.0 KiB
C#
109 lines
4.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Linq;
|
|
using System.Linq.Expressions;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace SqlSugar
|
|
{
|
|
public partial class SqlServerExpressionContext : ExpressionContext, ILambdaExpressions
|
|
{
|
|
public SqlSugarProvider Context { get; set; }
|
|
public SqlServerExpressionContext()
|
|
{
|
|
base.DbMehtods = new SqlServerMethod();
|
|
}
|
|
|
|
}
|
|
public partial class SqlServerMethod : DefaultDbMethod, IDbMethods
|
|
{
|
|
public override string GetTableWithDataBase(string dataBaseName, string tableName)
|
|
{
|
|
return $"{dataBaseName}.dbo.{tableName}";
|
|
}
|
|
public override string GetForXmlPath()
|
|
{
|
|
return " FOR XML PATH('')),1,len(N','),'') ";
|
|
}
|
|
public override string GetStringJoinSelector(string result, string separator)
|
|
{
|
|
return $"stuff((SELECT cast(N'{separator}' as nvarchar(max)) + cast({result} as nvarchar(max))";
|
|
}
|
|
public override string DateValue(MethodCallExpressionModel model)
|
|
{
|
|
var parameter = model.Args[0];
|
|
var parameter2 = model.Args[1];
|
|
if (parameter.MemberName != null && parameter.MemberName is DateTime)
|
|
{
|
|
return string.Format(" datepart({0},'{1}') ", parameter2.MemberValue, parameter.MemberName);
|
|
}
|
|
else
|
|
{
|
|
return string.Format(" datepart({0},{1}) ", parameter2.MemberValue, parameter.MemberName);
|
|
}
|
|
}
|
|
public override string HasValue(MethodCallExpressionModel model)
|
|
{
|
|
if (model.Args[0].Type == UtilConstants.GuidType)
|
|
{
|
|
var parameter = model.Args[0];
|
|
return string.Format("( {0} IS NOT NULL )", parameter.MemberName);
|
|
}
|
|
else
|
|
{
|
|
var parameter = model.Args[0];
|
|
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+")";
|
|
}
|
|
|
|
public override string JsonListObjectAny(MethodCallExpressionModel model)
|
|
{
|
|
return $"(EXISTS (SELECT * from OPENJSON({model.Args[0].MemberName}) " +
|
|
$"WITH([value] NVARCHAR(MAX) '$.{model.Args[1].MemberValue.ToString().ToSqlFilter()}') " +
|
|
$"WHERE [value] = {model.Args[2].MemberName}))";
|
|
}
|
|
|
|
public override string JsonArrayAny(MethodCallExpressionModel model)
|
|
{
|
|
return string.Format("(EXISTS(SELECT * from OPENJSON({0}) WHERE [value] = {1}))"
|
|
, model.Args[0].MemberName
|
|
, model.Args[1].MemberName
|
|
);
|
|
}
|
|
}
|
|
|
|
} |