diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 7144de36..ac357952 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -559,16 +559,16 @@ namespace base_entity //.UseConnectionString(FreeSql.DataType.Firebird, @"database=localhost:D:\fbdata\EXAMPLES.fdb;user=sysdba;password=123456;max pool size=5") //.UseQuoteSqlName(false) - //.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=3;AllowLoadLocalInfile=true") + .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=3;AllowLoadLocalInfile=true") - .UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true") + //.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true") //.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2") ////.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=toc;Pooling=true;Maximum Pool Size=2") //.UseNameConvert(FreeSql.Internal.NameConvertType.ToLower) - .UseConnectionString(FreeSql.DataType.Oracle, "user id=user1;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=2") - .UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) + //.UseConnectionString(FreeSql.DataType.Oracle, "user id=user1;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=2") + //.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) //.UseConnectionString(FreeSql.DataType.Dameng, "server=127.0.0.1;port=5236;user=2user;password=123456789;database=2user;poolsize=5;") //.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) @@ -600,6 +600,15 @@ namespace base_entity BaseEntity.Initialization(fsql, () => _asyncUow.Value); #endregion + var xxxc1 = User1.Select.ToSql(a => new + { + count = User1.Where(b => b.Id == a.Id).Count() + }); + + var tididentity = fsql.CodeFirst.GetTableByEntity(typeof(TestIdAndIdentity)); + + var tididDDL = fsql.CodeFirst.GetComparisonDDLStatements(typeof(TestIdAndIdentity)); + var lstKafka = fsql.Ado.Query("SELECT 123 AS ID,'10.0.0.0' AS IP FROM dual "); @@ -2558,4 +2567,12 @@ var sql11111 = fsql.Select() /// public ProducerConfig PConfig { get; set; } } + + class TestIdAndIdentity + { + [Column(IsPrimary = true)] + public int Id { get; set; } + [Column(IsIdentity = true)] + public int IdentityId { get; set; } + } } diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 5b0bcf35..f7c401e1 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -1255,31 +1255,34 @@ namespace FreeSql.Internal } } } - if (new[] { "Where", "WhereIf" }.Contains(exp3tmpCall.Method.Name) && exp3tmpCall.Object != null) + if (new[] { "Where", "WhereIf" }.Contains(exp3tmpCall.Method.Name)) { - //这段特别兼容 DbSet.Where 表达式解析 #216 - var exp3tmpTestCall = Expression.Call(exp3tmpCall.Object, exp3tmpCall.Method, exp3tmpCall.Arguments.Select(a => + //if (exp3tmpCall.Object != null) //BaseEntity.Where 也需要兼容 { - var a2 = a; - if (a2.NodeType == ExpressionType.Quote) a2 = (a as UnaryExpression)?.Operand; - if (a2?.NodeType == ExpressionType.Lambda) + //这段特别兼容 DbSet.Where 表达式解析 #216 + var exp3tmpTestCall = Expression.Call(exp3tmpCall.Object, exp3tmpCall.Method, exp3tmpCall.Arguments.Select(a => { - var alambda = a2 as LambdaExpression; - if (alambda.ReturnType == typeof(bool)) - return Expression.Constant(null, a.Type);// Expression.Lambda(Expression.Constant(true), alambda.Parameters); - } - return a; - //if (a.Type == typeof(Expression<>).MakeGenericType(typeof(Func<,>).MakeGenericType(exp3tmp.Type.GetGenericArguments()[0], typeof(bool)))) - // return Expression.Lambda(Expression.Constant(true), - }).ToArray()); - fsql = Expression.Lambda(exp3tmpTestCall).Compile().DynamicInvoke(); - var fsqlFindMethod = fsql.GetType().GetMethod(exp3tmpCall.Method.Name, exp3tmpCall.Arguments.Select(a => a.Type).ToArray()); - if (fsqlFindMethod == null) - throw new Exception(CoreStrings.Unable_Parse_ExpressionMethod(exp3tmpCall.Method.Name)); - var exp3StackOld = exp3Stack; - exp3Stack = new Stack(); - exp3Stack.Push(Expression.Call(Expression.Constant(fsql), fsqlFindMethod, exp3tmpCall.Arguments)); - while (exp3StackOld.Any()) exp3Stack.Push(exp3StackOld.Pop()); + var a2 = a; + if (a2.NodeType == ExpressionType.Quote) a2 = (a as UnaryExpression)?.Operand; + if (a2?.NodeType == ExpressionType.Lambda) + { + var alambda = a2 as LambdaExpression; + if (alambda.ReturnType == typeof(bool)) + return Expression.Constant(null, a.Type);// Expression.Lambda(Expression.Constant(true), alambda.Parameters); + } + return a; + //if (a.Type == typeof(Expression<>).MakeGenericType(typeof(Func<,>).MakeGenericType(exp3tmp.Type.GetGenericArguments()[0], typeof(bool)))) + // return Expression.Lambda(Expression.Constant(true), + }).ToArray()); + fsql = Expression.Lambda(exp3tmpTestCall).Compile().DynamicInvoke(); + var fsqlFindMethod = fsql.GetType().GetMethod(exp3tmpCall.Method.Name, exp3tmpCall.Arguments.Select(a => a.Type).ToArray()); + if (fsqlFindMethod == null) + throw new Exception(CoreStrings.Unable_Parse_ExpressionMethod(exp3tmpCall.Method.Name)); + var exp3StackOld = exp3Stack; + exp3Stack = new Stack(); + exp3Stack.Push(Expression.Call(Expression.Constant(fsql), fsqlFindMethod, exp3tmpCall.Arguments)); + while (exp3StackOld.Any()) exp3Stack.Push(exp3StackOld.Pop()); + } } } if (fsql == null)