Update mapper

This commit is contained in:
skx 2021-01-01 17:40:07 +08:00
parent 919cd24cbd
commit dc4a60acad
3 changed files with 24 additions and 12 deletions

View File

@ -10,15 +10,16 @@ namespace OrmTest
{
public static void Queryable2()
{
var list4 = Db.Queryable<ABMapping>()
.Mapper(it => it.A, it => it.AId)
.Mapper(it => it.B, it => it.BId)
.Where(it=>it.A.Name=="A")
.Where(it=>it.B.Id==1)
.Select(it=>new {
id=it.B.Id
})
.ToList();
var list4 = Db.Queryable<ABMapping>()
.Mapper(it => it.A, it => it.AId)
.Where(it => it.A.Name == "a")
.ToList();
var list5 = Db.Queryable<ABMapping>()
.Mapper(it => it.A, it => it.AId, it => it.A.Id)
.Where(it => it.A.Name == "a")
.ToList();
}
}

View File

@ -116,6 +116,11 @@ namespace SqlSugar
public ISugarQueryable<T> Mapper<TObject>(Expression<Func<T, TObject>> mapperObject, Expression<Func<T, object>> mainField, Expression<Func<T, object>> childField)
{
Check.Exception(mapperObject.ReturnType.Name == "IList`1", "Mapper no support IList , Use List<T>");
if (CallContext.MapperExpression.Value == null)
{
CallContext.MapperExpression.Value = new List<MapperExpression>();
}
CallContext.MapperExpression.Value.Add(new MapperExpression() { SqlBuilder = SqlBuilder, QueryBuilder = this.QueryBuilder, Type = MapperExpressionType.oneToOne, FillExpression = mapperObject, MappingField1Expression = mainField, MappingField2Expression=childField, Context = this.Context });
return _Mapper<TObject>(mapperObject, mainField, childField);
}
public ISugarQueryable<T> Mapper<TObject>(Expression<Func<T, List<TObject>>> mapperObject, Expression<Func<T, object>> mainField, Expression<Func<T, object>> childField)

View File

@ -54,7 +54,7 @@ namespace SqlSugar
if (isExMapper)
{
ExtMapper();
ExtMapper(fillInfo, mappingFild1Info, mappingFild1Info2, SelectInfo);
}
else if (isSameProperty)
{
@ -189,9 +189,15 @@ namespace SqlSugar
return "";
}
private void ExtMapper()
private void ExtMapper(MapperExpressionInfo fillInfo, MapperExpressionInfo mappingFild1Info, MapperExpressionInfo mappingFild1Info2, MapperExpressionInfo selectInfo)
{
throw new NotImplementedException();
var tableName = sqlBuilder.GetTranslationTableName(fillInfo.EntityInfo.DbTableName);
var whereLeft = sqlBuilder.GetTranslationColumnName(mappingFild1Info2.FieldName);
var whereRight = sqlBuilder.GetTranslationColumnName(mappingFild1Info.FieldString);
this.sql = this.context.Queryable<object>()
.AS(tableName)
.Where(string.Format(" {0}={1} ", whereLeft, whereRight))
.Select(sqlBuilder.GetTranslationColumnName(selectInfo.FieldName)).ToSql().Key;
}
public MapperSql GetSql()