Update exp to sql

This commit is contained in:
sunkaixuan
2022-12-20 21:03:06 +08:00
parent e65faa71ac
commit 2ad142dc5e
5 changed files with 18 additions and 5 deletions

View File

@@ -127,7 +127,7 @@ namespace SqlSugar
if (RightIsHasValue(leftExpression, rightExpression,ExpressionTool.IsLogicOperator(expression)))
{
Expression trueValue = Expression.Constant(true);
rightExpression = ExpressionBuilderHelper.CreateExpression(rightExpression, trueValue, ExpressionType.And);
rightExpression = ExpressionBuilderHelper.CreateExpression(rightExpression, trueValue, ExpressionType.Equal);
}
var leftIsBinary = leftExpression is BinaryExpression;
var rightBinary = rightExpression is BinaryExpression;

View File

@@ -20,7 +20,7 @@ namespace SqlSugar
if (IsBoolMember(express))
{
Expression trueValue = Expression.Constant(true);
args[0]= ExpressionBuilderHelper.CreateExpression(express.Test, trueValue, ExpressionType.And);
args[0]= ExpressionBuilderHelper.CreateExpression(express.Test, trueValue, ExpressionType.Equal);
}
var isLeft = parameter.IsLeft;
MethodCallExpressionModel model = new MethodCallExpressionModel();

View File

@@ -222,11 +222,11 @@ namespace SqlSugar
if (name == "IIF" && item == args.First() && item is MemberExpression)
{
Expression trueValue = Expression.Constant(true);
var newItem = ExpressionBuilderHelper.CreateExpression(item, trueValue, ExpressionType.And);
var newItem = ExpressionBuilderHelper.CreateExpression(item, trueValue, ExpressionType.Equal);
var member = (item as MemberExpression);
if (member.Member.Name == "HasValue")
{
newItem = ExpressionBuilderHelper.CreateExpression(member.Expression, Expression.Constant(null), ExpressionType.And);
newItem = ExpressionBuilderHelper.CreateExpression(member.Expression, Expression.Constant(null), ExpressionType.Equal);
}
AppendItem(parameter, name, new List<Expression>() { newItem}, model, newItem);
}

View File

@@ -780,7 +780,7 @@ namespace SqlSugar
private bool IsContainsArray(MethodCallExpression express, string methodName, bool isValidNativeMethod)
{
return !isValidNativeMethod && express.Method.DeclaringType.Namespace.IsIn("System.Linq", "System.Collections.Generic") && methodName == "Contains";
return !isValidNativeMethod && express.Method.DeclaringType.Namespace.IsIn("System.Collections", "System.Linq", "System.Collections.Generic") && methodName == "Contains";
}
private bool IsSubMethod(MethodCallExpression express, string methodName)
{

View File

@@ -1,4 +1,5 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
@@ -49,6 +50,18 @@ namespace SqlSugar
return Expression.Equal(left, Expression.Convert(value, left.Type));
}
}
public static Expression CreateExpressionLike<ColumnType>(Type entityType,string propertyName,List<ColumnType> list)
{
var parameter = Expression.Parameter(entityType, "p");
MemberExpression memberProperty = Expression.PropertyOrField(parameter, propertyName);
MethodInfo method = typeof(List<>).MakeGenericType(typeof(ColumnType)).GetMethod("Contains");
ConstantExpression constantCollection = Expression.Constant(list);
MethodCallExpression methodCall = Expression.Call(constantCollection, method, memberProperty);
var expression = Expression.Lambda(methodCall, parameter);
return expression;
}
public static Expression<Func<T, object>> CreateNewFields<T>(EntityInfo entity,List<string> propertyNames)
{
Type sourceType = typeof(T);