Update navigate query

This commit is contained in:
sunkaixuan 2022-04-18 15:17:11 +08:00
parent f8acc5b092
commit 560b02b646
3 changed files with 62 additions and 4 deletions

View File

@ -60,6 +60,16 @@ namespace OrmTest
.Where(x => x.SchoolA.SchoolName == "北大") .Where(x => x.SchoolA.SchoolName == "北大")
.ToList(); .ToList();
var list3 = db.Queryable<StudentA>()
.Includes(x => x.SchoolA, x => x.RoomList)//2个参数就是 then Include
.Includes(x => x.SchoolA, x => x.TeacherList)//2个参数就是 then Include
.Includes(x => x.Books.Select(z=>new BookA() { Name=z.Name }).ToList())
.Where(x => x.Books.Any(z => z.BookId == 1))
.Where(x => x.SchoolA.SchoolName == "北大")
.ToList();
//先用Mapper导航映射查出第二层 //先用Mapper导航映射查出第二层
var list = db.Queryable<StudentA>().Mapper(x => x.SchoolA, x => x.SchoolId).ToList(); var list = db.Queryable<StudentA>().Mapper(x => x.SchoolA, x => x.SchoolId).ToList();
@ -88,7 +98,7 @@ namespace OrmTest
db.Insertable(new ABMapping1() { AId =2, BId = 1 }).ExecuteCommand(); db.Insertable(new ABMapping1() { AId =2, BId = 1 }).ExecuteCommand();
db.Insertable(new ABMapping1() { AId = 2, BId = 2 }).ExecuteCommand(); db.Insertable(new ABMapping1() { AId = 2, BId = 2 }).ExecuteCommand();
var p = ""; var p = "";
var list3= db.Queryable<A1>() var list4= db.Queryable<A1>()
.Includes(x => x.BList.WhereIF(!string.IsNullOrEmpty(p),it=>it.Id==11).ToList()) .Includes(x => x.BList.WhereIF(!string.IsNullOrEmpty(p),it=>it.Id==11).ToList())
.Where(x=>x.BList.Any()).ToList(); .Where(x=>x.BList.Any()).ToList();

View File

@ -218,7 +218,7 @@ namespace SqlSugar
CSharpTypeName = bColumn.PropertyInfo.PropertyType.Name CSharpTypeName = bColumn.PropertyInfo.PropertyType.Name
})); }));
var sql = GetWhereSql(); var sql = GetWhereSql();
var bList = selector(this.Context.Queryable<object>().AS(bEntityInfo.DbTableName).AddParameters(sql.Parameters).Where(conditionalModels2).WhereIF(sql.WhereString.HasValue(),sql.WhereString).OrderByIF(sql.OrderByString.HasValue(),sql.OrderByString)); var bList = selector(this.Context.Queryable<object>().AS(bEntityInfo.DbTableName).AddParameters(sql.Parameters).Where(conditionalModels2).WhereIF(sql.WhereString.HasValue(),sql.WhereString).Select(sql.SelectString).OrderByIF(sql.OrderByString.HasValue(),sql.OrderByString));
if (bList.HasValue()) if (bList.HasValue())
{ {
foreach (var listItem in list) foreach (var listItem in list)
@ -288,7 +288,7 @@ namespace SqlSugar
CSharpTypeName = listItemPkColumn.PropertyInfo.PropertyType.Name CSharpTypeName = listItemPkColumn.PropertyInfo.PropertyType.Name
})); }));
var sqlObj = GetWhereSql(); var sqlObj = GetWhereSql();
var navList = selector(this.Context.Queryable<object>().AS(navEntityInfo.DbTableName).AddParameters(sqlObj.Parameters).Where(conditionalModels).WhereIF(sqlObj.WhereString.HasValue(),sqlObj.WhereString).OrderByIF(sqlObj.OrderByString.HasValue(),sqlObj.OrderByString)); var navList = selector(this.Context.Queryable<object>().AS(navEntityInfo.DbTableName).AddParameters(sqlObj.Parameters).Where(conditionalModels).WhereIF(sqlObj.WhereString.HasValue(),sqlObj.WhereString).Select(sqlObj.SelectString).OrderByIF(sqlObj.OrderByString.HasValue(),sqlObj.OrderByString));
if (navList.HasValue()) if (navList.HasValue())
{ {
foreach (var item in list) foreach (var item in list)
@ -341,6 +341,37 @@ namespace SqlSugar
var exp = method.Arguments[1]; var exp = method.Arguments[1];
oredrBy.Add(" " + queryable.QueryBuilder.GetExpressionValue(exp, ResolveExpressType.WhereSingle).GetString()); oredrBy.Add(" " + queryable.QueryBuilder.GetExpressionValue(exp, ResolveExpressType.WhereSingle).GetString());
} }
else if (method.Method.Name == "Select")
{
var exp = method.Arguments[1];
var types = exp.Type.GetGenericArguments();
if (types != null && types.Length > 0)
{
var type = types[0];
var entityInfo = this.Context.EntityMaintenance.GetEntityInfo(type);
if (entityInfo.Columns.Count(x => x.Navigat != null) == 0)
{
result.SelectString = (" " + queryable.QueryBuilder.GetExpressionValue(exp, ResolveExpressType.SelectSingle).GetString());
}
else
{
var pkInfo = entityInfo.Columns.FirstOrDefault(x => x.IsPrimarykey);
if (pkInfo != null)
{
var pkName = pkInfo.DbColumnName;
AppColumns(result, queryable, pkName);
}
foreach (var nav in entityInfo.Columns.Where(x => x.Navigat != null&&x.Navigat.NavigatType==NavigateType.OneToOne))
{
var navColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyName == nav.Navigat.Name);
if (navColumn != null)
{
AppColumns(result, queryable, navColumn.DbColumnName);
}
}
}
}
}
else if (method.Method.Name == "OrderByDescending") else if (method.Method.Name == "OrderByDescending")
{ {
var exp = method.Arguments[1]; var exp = method.Arguments[1];
@ -370,10 +401,20 @@ namespace SqlSugar
return result; return result;
} }
private static void AppColumns(SqlInfo result, ISugarQueryable<object> queryable, string columnName)
{
var selectPkName = queryable.SqlBuilder.GetTranslationColumnName(columnName);
if (result.SelectString.HasValue() && !result.SelectString.ToLower().Contains(selectPkName.ToLower()))
{
result.SelectString = result.SelectString + "," + selectPkName;
}
}
public class SqlInfo public class SqlInfo
{ {
public string WhereString { get; set; } public string WhereString { get; set; }
public string OrderByString { get; set; } public string OrderByString { get; set; }
public string SelectString { get; set; }
public List<SugarParameter> Parameters { get; set; } public List<SugarParameter> Parameters { get; set; }
} }

View File

@ -868,7 +868,14 @@ namespace SqlSugar
} }
else if (this.QueryBuilder.EntityType == UtilConstants.ObjType || (this.QueryBuilder.AsTables != null && this.QueryBuilder.AsTables.Count == 1)||this.QueryBuilder.EntityName!=this.QueryBuilder.EntityType.Name) else if (this.QueryBuilder.EntityType == UtilConstants.ObjType || (this.QueryBuilder.AsTables != null && this.QueryBuilder.AsTables.Count == 1)||this.QueryBuilder.EntityName!=this.QueryBuilder.EntityType.Name)
{ {
return this.Select<TResult>(this.SqlBuilder.SqlSelectAll); if (this.QueryBuilder.SelectValue.HasValue()&& this.QueryBuilder.SelectValue.ObjToString().Contains("AS"))
{
return this.Select<TResult>(this.QueryBuilder.SelectValue+"");
}
else
{
return this.Select<TResult>(this.SqlBuilder.SqlSelectAll);
}
} }
else else
{ {