Update exp to sql

This commit is contained in:
sunkaixuan 2022-04-13 19:06:51 +08:00
parent 1af0b3b053
commit df94ed9363
2 changed files with 20 additions and 11 deletions

View File

@ -80,12 +80,15 @@ namespace OrmTest
db.DbMaintenance.TruncateTable<ABMapping1>();
db.Insertable(new A1() { Id = 1, Name = "a1" }).ExecuteCommand();
db.Insertable(new A1() { Id = 2, Name = "a2" }).ExecuteCommand();
db.Insertable(new A1() { Id = 3, Name = "a3" }).ExecuteCommand();
db.Insertable(new B1() { Id = 1, Name = "b1" }).ExecuteCommand();
db.Insertable(new B1() { Id = 2, Name = "b2" }).ExecuteCommand();
db.Insertable(new ABMapping1() { AId=1,BId=1 }).ExecuteCommand();
db.Insertable(new ABMapping1() { AId =2, BId = 1 }).ExecuteCommand();
db.Insertable(new ABMapping1() { AId = 2, BId = 2 }).ExecuteCommand();
var list3= db.Queryable<A1>().Includes(x => x.BList).ToList();
var list3= db.Queryable<A1>()
.Includes(x => x.BList)
.Where(x=>x.BList.Any()).ToList();
var list31 = db.Queryable<A1>().Includes(x => x.BList,x=>x.AList).ToList();
db.CodeFirst.InitTables(typeof(Tree1));

View File

@ -94,18 +94,24 @@ namespace SqlSugar
}
private MapperSql GetManyToManySql()
{
var pk = this.ProPertyEntity.Columns.First(it => it.IsPrimarykey == true).DbColumnName;
var name = this.EntityInfo.Columns.First(it => it.PropertyName == Navigat.Name).DbColumnName;
var selectName = this.ProPertyEntity.Columns.First(it => it.PropertyName == MemberName).DbColumnName;
var bPk = this.ProPertyEntity.Columns.First(it => it.IsPrimarykey == true).DbColumnName;
var aPk = this.EntityInfo.Columns.First(it => it.IsPrimarykey == true).DbColumnName;
MapperSql mapper = new MapperSql();
var queryable = this.context.Queryable<object>();
pk = queryable.QueryBuilder.Builder.GetTranslationColumnName(pk);
name = queryable.QueryBuilder.Builder.GetTranslationColumnName(name);
selectName = queryable.QueryBuilder.Builder.GetTranslationColumnName(selectName);
mapper.Sql = queryable
.AS(this.ProPertyEntity.DbTableName)
.WhereIF(!string.IsNullOrEmpty(whereSql),whereSql)
.Where($" {ShorName}.{name}={pk} ").Select(selectName).ToSql().Key;
bPk = queryable.QueryBuilder.Builder.GetTranslationColumnName(bPk);
aPk = queryable.QueryBuilder.Builder.GetTranslationColumnName(aPk);
var mappingType = Navigat.MappingType;
var mappingEntity = this.context.EntityMaintenance.GetEntityInfo(mappingType);
var mappingTableName=queryable.QueryBuilder.Builder.GetTranslationTableName(mappingEntity.DbTableName);
var mappingA = mappingEntity.Columns.First(it => it.PropertyName == Navigat.MappingAId).DbColumnName;
var mappingB = mappingEntity.Columns.First(it => it.PropertyName == Navigat.MappingBId).DbColumnName;
mappingA = queryable.QueryBuilder.Builder.GetTranslationColumnName(mappingA);
mappingB = queryable.QueryBuilder.Builder.GetTranslationColumnName(mappingB);
var bTableName = queryable.QueryBuilder.Builder.GetTranslationTableName(this.ProPertyEntity.DbTableName);
mapper.Sql = $" (select count(1) from {bTableName} {this.ProPertyEntity.DbTableName}_1 where {this.ProPertyEntity.DbTableName}_1.{bPk} in (select {mappingA} from {mappingTableName} where {mappingB} = {ShorName}.{aPk} )) ";
if (this.whereSql.HasValue())
mapper.Sql = mapper.Sql + " AND " + this.whereSql;
mapper.Sql = $" ({mapper.Sql}) ";
mapper.Sql = GetMethodSql(mapper.Sql);
return mapper;