Add SqlFunc.GetSelfAndAutoFill

This commit is contained in:
sunkaixuan 2017-07-17 12:56:21 +08:00
parent cf71763d53
commit c74d460885
8 changed files with 63 additions and 19 deletions

View File

@ -15,4 +15,8 @@ namespace OrmTest.Models
public string Name { get; set; } public string Name { get; set; }
public Student Student { get; set; } public Student Student { get; set; }
} }
public class ViewModelStudent3: Student
{
public string SchoolName { get; set; }
}
} }

View File

@ -27,6 +27,7 @@ namespace OrmTest.UnitTest
single4(); single4();
single5(); single5();
Multiple(); Multiple();
Multiple2();
singleDynamic(); singleDynamic();
MultipleDynamic(); MultipleDynamic();
} }
@ -51,6 +52,24 @@ namespace OrmTest.UnitTest
}, },
"Select.Multiple Error"); "Select.Multiple Error");
} }
private void Multiple2()
{
Expression<Func<Student, School, object>> exp = (it, school) => new ViewModelStudent3() { SchoolName=school.Name,Id=SqlFunc.GetSelfAndAutoFill(it.Id) };
ExpressionContext expContext = new ExpressionContext();
expContext.IsSingle = false;
expContext.Resolve(exp, ResolveExpressType.SelectMultiple);
var selectorValue = expContext.Result.GetString();
var pars = expContext.Parameters;
base.Check(
selectorValue,
pars,
@" [school].[Name] AS [SchoolName] ,it.*",
new List<SugarParameter>(){
},
"Select.Multiple Error");
}
private void MultipleDynamic() private void MultipleDynamic()
{ {

View File

@ -179,6 +179,7 @@ namespace SqlSugar
} }
public virtual string GetAsString(string asName, string fieldValue) public virtual string GetAsString(string asName, string fieldValue)
{ {
if (fieldValue.Contains(".*")) return fieldValue;
return string.Format(" {0} {1} {2} ", GetTranslationColumnName(fieldValue), "AS", GetTranslationColumnName(asName)); return string.Format(" {0} {1} {2} ", GetTranslationColumnName(fieldValue), "AS", GetTranslationColumnName(asName));
} }
@ -189,6 +190,7 @@ namespace SqlSugar
public virtual string GetAsString(string asName, string fieldValue, string fieldShortName) public virtual string GetAsString(string asName, string fieldValue, string fieldShortName)
{ {
if (fieldValue.Contains(".*")) return fieldValue;
return string.Format(" {0} {1} {2} ", GetTranslationColumnName(fieldShortName + "." + fieldValue), "AS", GetTranslationColumnName(asName)); return string.Format(" {0} {1} {2} ", GetTranslationColumnName(fieldShortName + "." + fieldValue), "AS", GetTranslationColumnName(asName));
} }
public virtual void Clear() public virtual void Clear()

View File

@ -275,5 +275,12 @@ namespace SqlSugar
{ {
return "'" + Guid.NewGuid() + "' "; return "'" + Guid.NewGuid() + "' ";
} }
public string GetSelfAndAutoFill(string shortName, bool isSingle)
{
if (isSingle) return "*";
else
return string.Format("{0}.*", shortName);
}
} }
} }

View File

@ -47,7 +47,7 @@ namespace SqlSugar
string AggregateMax(MethodCallExpressionModel model); string AggregateMax(MethodCallExpressionModel model);
string AggregateCount(MethodCallExpressionModel model); string AggregateCount(MethodCallExpressionModel model);
string MappingColumn(MethodCallExpressionModel model); string MappingColumn(MethodCallExpressionModel model);
string GetSelfAndAutoFill(MethodCallExpressionModel model); string GetSelfAndAutoFill(string shortName,bool isSingle);
string True(); string True();
string False(); string False();
string GuidNew(); string GuidNew();

View File

@ -101,6 +101,6 @@ namespace SqlSugar
/// <typeparam name="TResult"></typeparam> /// <typeparam name="TResult"></typeparam>
/// <param name="value"></param> /// <param name="value"></param>
/// <returns></returns> /// <returns></returns>
public static TResult GetSelfAndAutoFill<TResult>(object value) { throw new NotSupportedException("This method is not supported by the current parameter"); } public static TResult GetSelfAndAutoFill<TResult>(TResult value) { throw new NotSupportedException("This method is not supported by the current parameter"); }
} }
} }

View File

@ -67,6 +67,7 @@ namespace SqlSugar
{ {
case ResolveExpressType.WhereSingle: case ResolveExpressType.WhereSingle:
case ResolveExpressType.WhereMultiple: case ResolveExpressType.WhereMultiple:
Check.Exception(name == "GetSelfAndAutoFill", "SqlFunc.GetSelfAndAutoFill can only be used in Select.");
Where(parameter, isLeft, name, args, model); Where(parameter, isLeft, name, args, model);
break; break;
case ResolveExpressType.SelectSingle: case ResolveExpressType.SelectSingle:
@ -110,6 +111,13 @@ namespace SqlSugar
} }
private void Select(ExpressionParameter parameter, bool? isLeft, string name, IEnumerable<Expression> args, MethodCallExpressionModel model, List<MethodCallExpressionArgs> appendArgs = null) private void Select(ExpressionParameter parameter, bool? isLeft, string name, IEnumerable<Expression> args, MethodCallExpressionModel model, List<MethodCallExpressionArgs> appendArgs = null)
{
if (name == "GetSelfAndAutoFill")
{
var memberValue = (args.First() as MemberExpression).Expression.ToString();
model.Args.Add(new MethodCallExpressionArgs() { MemberValue= memberValue, IsMember=true, MemberName= memberValue });
}
else
{ {
foreach (var item in args) foreach (var item in args)
{ {
@ -127,6 +135,7 @@ namespace SqlSugar
{ {
model.Args.AddRange(appendArgs); model.Args.AddRange(appendArgs);
} }
}
parameter.BaseParameter.CommonTempData = GetMdthodValue(name, model); parameter.BaseParameter.CommonTempData = GetMdthodValue(name, model);
} }
private void Where(ExpressionParameter parameter, bool? isLeft, string name, IEnumerable<Expression> args, MethodCallExpressionModel model, List<MethodCallExpressionArgs> appendArgs = null) private void Where(ExpressionParameter parameter, bool? isLeft, string name, IEnumerable<Expression> args, MethodCallExpressionModel model, List<MethodCallExpressionArgs> appendArgs = null)
@ -269,6 +278,9 @@ namespace SqlSugar
Check.Exception(!isValid, "SqlFunc.MappingColumn parameters error, The property name on the left, string value on the right"); Check.Exception(!isValid, "SqlFunc.MappingColumn parameters error, The property name on the left, string value on the right");
this.Context.Parameters.RemoveAll(it => it.ParameterName == model.Args[1].MemberName.ObjToString()); this.Context.Parameters.RemoveAll(it => it.ParameterName == model.Args[1].MemberName.ObjToString());
return mappingColumnResult; return mappingColumnResult;
case "GetSelfAndAutoFill":
this.Context.Parameters.RemoveAll(it => it.ParameterName == model.Args[0].MemberName.ObjToString());
return this.Context.DbMehtods.GetSelfAndAutoFill(model.Args[0].MemberValue.ObjToString(),this.Context.IsSingle);
default: default:
break; break;
} }

View File

@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("4.2.0.9")] [assembly: AssemblyVersion("4.2.1")]
[assembly: AssemblyFileVersion("4.2.0.9")] [assembly: AssemblyFileVersion("4.2.1")]