Update Subquery.ToDto

This commit is contained in:
sunkaixuan 2023-05-01 08:03:58 +08:00
parent 0c2d110bc5
commit fc80b3a2c7
2 changed files with 23 additions and 2 deletions

View File

@ -44,6 +44,7 @@ namespace SqlSugar
public string GetValue(Expression expression = null) public string GetValue(Expression expression = null)
{ {
var exp = expression as MethodCallExpression; var exp = expression as MethodCallExpression;
if(IsAutoGeneric(exp)) return GetValueByAuto(exp);
if (IsAutoSelect(exp)) return GetValueByAuto(exp); if (IsAutoSelect(exp)) return GetValueByAuto(exp);
InitType(exp); InitType(exp);
var type=expression.Type; var type=expression.Type;
@ -98,7 +99,7 @@ namespace SqlSugar
public void SetShortName(MethodCallExpression exp, string result) public void SetShortName(MethodCallExpression exp, string result)
{ {
if (exp.Arguments[0] is LambdaExpression) if (exp.Arguments.Any()&&exp.Arguments[0] is LambdaExpression)
{ {
var parameters = (exp.Arguments[0] as LambdaExpression).Parameters; var parameters = (exp.Arguments[0] as LambdaExpression).Parameters;
if (parameters != null && parameters.Count > 0) if (parameters != null && parameters.Count > 0)
@ -123,7 +124,19 @@ namespace SqlSugar
private string GetValueByAuto(MethodCallExpression exp) private string GetValueByAuto(MethodCallExpression exp)
{ {
var selectExp = exp.Arguments[0]; var selectExp = exp.Arguments.FirstOrDefault();
if (selectExp==null)
{
var type = exp.Type.GenericTypeArguments[0];
var parameter = Expression.Parameter(type, "it");
// 构造返回值表达式
var body = Expression.MemberInit(Expression.New(type));
// 将返回值表达式作为lambda表达式的主体
selectExp = Expression.Lambda(body, parameter);
}
var bodyExp=ExpressionTool.GetLambdaExpressionBody(selectExp); var bodyExp=ExpressionTool.GetLambdaExpressionBody(selectExp);
var newMemExp = (bodyExp as MemberInitExpression); var newMemExp = (bodyExp as MemberInitExpression);
var parameters = (selectExp as LambdaExpression).Parameters; var parameters = (selectExp as LambdaExpression).Parameters;
@ -177,5 +190,9 @@ namespace SqlSugar
{ {
return exp.Arguments.Count == 2 && exp.Arguments.Last().Type == UtilConstants.BoolType; return exp.Arguments.Count == 2 && exp.Arguments.Last().Type == UtilConstants.BoolType;
} }
private static bool IsAutoGeneric(MethodCallExpression exp)
{
return exp.Arguments.Count == 0&&exp.Method.GetGenericArguments().Count()==1;
}
} }
} }

View File

@ -179,6 +179,10 @@ namespace SqlSugar
{ {
return null; return null;
} }
public List<TResult> ToList<TResult>()
{
return null;
}
public List<TResult> ToList<TResult>(Func<T, TResult> selector,bool isAutoDto)where TResult : class, new() public List<TResult> ToList<TResult>(Func<T, TResult> selector,bool isAutoDto)where TResult : class, new()
{ {
return null; return null;