diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs index ee3976ad6..9f8475a0d 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs @@ -115,7 +115,7 @@ namespace SqlSugar public virtual string ContainsArray(MethodCallExpressionModel model) { var inValueIEnumerable = (IEnumerable)model.Args[0].MemberValue; - List inValues = new List(); + List inValues = new List(); if (inValueIEnumerable != null) { foreach (var item in inValueIEnumerable) @@ -145,10 +145,14 @@ namespace SqlSugar var isNvarchar = model.Args.Count == 3; if (inValues != null && inValues.Count > 0) { - if (isNvarchar&& model.Args[2].MemberValue.Equals(true)) + if (isNvarchar && model.Args[2].MemberValue.Equals(true)) { inValueString = inValues.ToArray().ToJoinSqlInValsN(); } + else if (inValues.Any()&&inValues.FirstOrDefault() is bool &&inValues.All(it => it is bool)) + { + inValueString = string.Join(",", inValues.Select(it => Convert.ToBoolean(it) ? 1 : 0)); + } else { inValueString = inValues.ToArray().ToJoinSqlInVals(); diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/OneToOneNavgateExpression.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/OneToOneNavgateExpression.cs index bfcf32e34..0ed3783c4 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/OneToOneNavgateExpression.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/OneToOneNavgateExpression.cs @@ -103,11 +103,19 @@ namespace SqlSugar { var attr= this.ProPertyEntity.Type.GetCustomAttribute(); var configId = ((object)this.context.CurrentConnectionConfig.ConfigId).ObjToString(); - if (attr != null&& configId != attr.configId.ObjToString()) + if (attr != null && configId != attr.configId.ObjToString()) { - var dbName = this.context.Root.GetConnection(attr.configId).Ado.Connection.Database; - tableName = queryable.QueryBuilder.LambdaExpressions.DbMehtods.GetTableWithDataBase - (queryable.QueryBuilder.Builder.GetTranslationColumnName(dbName), queryable.QueryBuilder.Builder.GetTranslationColumnName(tableName)); + var context = this.context.Root.GetConnection(attr.configId); + var dbName = context.Ado.Connection.Database; + if (context.CurrentConnectionConfig.DbLinkName.HasValue()) + { + tableName = UtilMethods.GetTableByDbLink(context, tableName, tableName, attr); + } + else + { + tableName = queryable.QueryBuilder.LambdaExpressions.DbMehtods.GetTableWithDataBase + (queryable.QueryBuilder.Builder.GetTranslationColumnName(dbName), queryable.QueryBuilder.Builder.GetTranslationColumnName(tableName)); + } } } Type[] clearTypes = null; diff --git a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs index 3c977405c..33c6a80be 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs @@ -18,6 +18,27 @@ namespace SqlSugar { public class UtilMethods { + internal static string GetTableByDbLink(SqlSugarProvider context,string tableName, string oldTableName, TenantAttribute attr) + { + QueryBuilder queryBuilder=InstanceFactory.GetQueryBuilderWithContext(context); + var dbLinkName = context.Root.GetConnection(attr.configId).CurrentConnectionConfig.DbLinkName; + if (dbLinkName != null) + { + if (dbLinkName.First() == '@') + { + tableName = queryBuilder.Builder.GetTranslationColumnName(oldTableName) + dbLinkName; + } + else if (dbLinkName.Last() == '_') + { + tableName = dbLinkName + oldTableName; + } + else + { + tableName = dbLinkName + "." + queryBuilder.Builder.GetTranslationColumnName(oldTableName); + } + } + return tableName; + } public static List> GetColumnInfo(IDataReader reader) { var columnInfo = new List>();