diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/StringTest.cs index 2b64b531..24ee66d5 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/StringTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +锘縰sing FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -57,7 +57,7 @@ namespace FreeSql.Tests.MySqlConnectorExpression { var fsql = g.mysql; fsql.Delete().Where("1=1").ExecuteAffrows(); - fsql.Insert(new[] { new StringJoin01 { name = "北京" }, new StringJoin01 { name = "上海" }, new StringJoin01 { name = "深圳" }, }).ExecuteAffrows(); + fsql.Insert(new[] { new StringJoin01 { name = "鍖椾含" }, new StringJoin01 { name = "涓婃捣" }, new StringJoin01 { name = "娣卞湷" }, }).ExecuteAffrows(); var val1 = string.Join(",", fsql.Select().ToList(a => a.name)); var val2 = fsql.Select().ToList(a => string.Join(",", fsql.Select().As("b").ToList(b => b.name))); @@ -98,7 +98,7 @@ namespace FreeSql.Tests.MySqlConnectorExpression [Fact] public void Format() { - var item = g.mysql.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + var item = g.mysql.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}", @@ -121,9 +121,9 @@ WHERE (a.`Id` = {item.Id})", sql); [Fact] public void Format4() { - //3个 {} 时,Arguments 解析出来是分开的 - //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray [] - var item = g.mysql.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + //3涓 {} 鏃讹紝Arguments 瑙f瀽鍑烘潵鏄垎寮鐨 + //4涓 {} 鏃讹紝Arguments[1] 鍙兘瑙f瀽杩欎釜鍑烘潵锛岀劧鍚庨噷闈㈡槸 NewArray [] + var item = g.mysql.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}", @@ -281,6 +281,17 @@ WHERE (a.`Id` = {item.Id})", sql); //SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a__Type.`Guid` as4, a__Type.`ParentId` as5, a__Type.`Name` as6, a.`Title` as7, a.`CreateTime` as8 //FROM `tb_topic` a, `TestTypeInfo` a__Type //WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%')) + + + list.Add(select.Where(a => a.Title.Contains("%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.Title + "aaa").Contains("aaa" + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name + "%")).ToList()); } [Fact] public void ToLower() diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengExpression/StringTest.cs index a375a82a..9a8a92c3 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengExpression/StringTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +锘縰sing FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -55,7 +55,7 @@ namespace FreeSql.Tests.Odbc.DamengExpression { var fsql = g.dameng; fsql.Delete().Where("1=1").ExecuteAffrows(); - fsql.Insert(new[] { new StringJoin01 { name = "北京" }, new StringJoin01 { name = "上海" }, new StringJoin01 { name = "深圳" }, }).ExecuteAffrows(); + fsql.Insert(new[] { new StringJoin01 { name = "鍖椾含" }, new StringJoin01 { name = "涓婃捣" }, new StringJoin01 { name = "娣卞湷" }, }).ExecuteAffrows(); var val1 = string.Join(",", fsql.Select().ToList(a => a.name)); var val2 = fsql.Select().ToList(a => string.Join(",", fsql.Select().As("b").ToList(b => b.name))); @@ -96,7 +96,7 @@ namespace FreeSql.Tests.Odbc.DamengExpression [Fact] public void Format() { - var item = g.dameng.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + var item = g.dameng.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}", @@ -119,9 +119,9 @@ WHERE (a.""ID"" = {item.Id})", sql); [Fact] public void Format4() { - //3个 {} 时,Arguments 解析出来是分开的 - //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray [] - var item = g.dameng.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + //3涓 {} 鏃讹紝Arguments 瑙f瀽鍑烘潵鏄垎寮鐨 + //4涓 {} 鏃讹紝Arguments[1] 鍙兘瑙f瀽杩欎釜鍑烘潵锛岀劧鍚庨噷闈㈡槸 NewArray [] + var item = g.dameng.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}", @@ -279,6 +279,17 @@ WHERE (a.""ID"" = {item.Id})", sql); //SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a__Type.`Guid` as4, a__Type.`ParentId` as5, a__Type.`Name` as6, a.`Title` as7, a.`CreateTime` as8 //FROM `tb_topic` a, `TestTypeInfo` a__Type //WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%')) + + + list.Add(select.Where(a => a.Title.Contains("%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.Title + "aaa").Contains("aaa" + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name + "%")).ToList()); } [Fact] public void ToLower() diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcExpression/StringTest.cs index 19b84f34..2c284fac 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcExpression/StringTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +锘縰sing FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESExpression/StringTest.cs index adc32074..50bcc720 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESExpression/StringTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +锘縰sing FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -55,7 +55,7 @@ namespace FreeSql.Tests.Odbc.KingbaseESExpression { var fsql = g.kingbaseES; fsql.Delete().Where("1=1").ExecuteAffrows(); - fsql.Insert(new[] { new StringJoin01 { name = "北京" }, new StringJoin01 { name = "上海" }, new StringJoin01 { name = "深圳" }, }).ExecuteAffrows(); + fsql.Insert(new[] { new StringJoin01 { name = "鍖椾含" }, new StringJoin01 { name = "涓婃捣" }, new StringJoin01 { name = "娣卞湷" }, }).ExecuteAffrows(); var val1 = string.Join(",", fsql.Select().ToList(a => a.name)); var val2 = fsql.Select().ToList(a => string.Join(",", fsql.Select().As("b").ToList(b => b.name))); @@ -96,7 +96,7 @@ namespace FreeSql.Tests.Odbc.KingbaseESExpression [Fact] public void Format() { - var item = g.kingbaseES.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + var item = g.kingbaseES.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}", @@ -119,9 +119,9 @@ WHERE (a.""ID"" = {item.Id})", sql); [Fact] public void Format4() { - //3个 {} 时,Arguments 解析出来是分开的 - //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray [] - var item = g.kingbaseES.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + //3涓 {} 鏃讹紝Arguments 瑙f瀽鍑烘潵鏄垎寮鐨 + //4涓 {} 鏃讹紝Arguments[1] 鍙兘瑙f瀽杩欎釜鍑烘潵锛岀劧鍚庨噷闈㈡槸 NewArray [] + var item = g.kingbaseES.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}", @@ -279,6 +279,17 @@ WHERE (a.""ID"" = {item.Id})", sql); //SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a__Type.`Guid` as4, a__Type.`ParentId` as5, a__Type.`Name` as6, a.`Title` as7, a.`CreateTime` as8 //FROM `tb_topic` a, `TestTypeInfo` a__Type //WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%')) + + + list.Add(select.Where(a => a.Title.Contains("%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.Title + "aaa").Contains("aaa" + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name + "%")).ToList()); } [Fact] public void ToLower() diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlExpression/StringTest.cs index d5488cc4..72a21b95 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlExpression/StringTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +锘縰sing FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -57,7 +57,7 @@ namespace FreeSql.Tests.Odbc.MySqlExpression { var fsql = g.mysql; fsql.Delete().Where("1=1").ExecuteAffrows(); - fsql.Insert(new[] { new StringJoin01 { name = "北京" }, new StringJoin01 { name = "上海" }, new StringJoin01 { name = "深圳" }, }).ExecuteAffrows(); + fsql.Insert(new[] { new StringJoin01 { name = "鍖椾含" }, new StringJoin01 { name = "涓婃捣" }, new StringJoin01 { name = "娣卞湷" }, }).ExecuteAffrows(); var val1 = string.Join(",", fsql.Select().ToList(a => a.name)); var val2 = fsql.Select().ToList(a => string.Join(",", fsql.Select().As("b").ToList(b => b.name))); @@ -98,7 +98,7 @@ namespace FreeSql.Tests.Odbc.MySqlExpression [Fact] public void Format() { - var item = g.mysql.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + var item = g.mysql.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}", @@ -121,9 +121,9 @@ WHERE (a.`Id` = {item.Id})", sql); [Fact] public void Format4() { - //3个 {} 时,Arguments 解析出来是分开的 - //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray [] - var item = g.mysql.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + //3涓 {} 鏃讹紝Arguments 瑙f瀽鍑烘潵鏄垎寮鐨 + //4涓 {} 鏃讹紝Arguments[1] 鍙兘瑙f瀽杩欎釜鍑烘潵锛岀劧鍚庨噷闈㈡槸 NewArray [] + var item = g.mysql.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}", @@ -281,6 +281,17 @@ WHERE (a.`Id` = {item.Id})", sql); //SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a__Type.`Guid` as4, a__Type.`ParentId` as5, a__Type.`Name` as6, a.`Title` as7, a.`CreateTime` as8 //FROM `tb_topic` a, `TestTypeInfo` a__Type //WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%')) + + + list.Add(select.Where(a => a.Title.Contains("%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.Title + "aaa").Contains("aaa" + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name + "%")).ToList()); } [Fact] public void ToLower() diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleExpression/StringTest.cs index 30346e3b..ff74cd37 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleExpression/StringTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +锘縰sing FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -55,7 +55,7 @@ namespace FreeSql.Tests.Odbc.OracleExpression { var fsql = g.oracle; fsql.Delete().Where("1=1").ExecuteAffrows(); - fsql.Insert(new[] { new StringJoin01 { name = "北京" }, new StringJoin01 { name = "上海" }, new StringJoin01 { name = "深圳" }, }).ExecuteAffrows(); + fsql.Insert(new[] { new StringJoin01 { name = "鍖椾含" }, new StringJoin01 { name = "涓婃捣" }, new StringJoin01 { name = "娣卞湷" }, }).ExecuteAffrows(); var val1 = string.Join(",", fsql.Select().ToList(a => a.name)); var val2 = fsql.Select().ToList(a => string.Join(",", fsql.Select().As("b").ToList(b => b.name))); @@ -96,7 +96,7 @@ namespace FreeSql.Tests.Odbc.OracleExpression [Fact] public void Format() { - var item = g.oracle.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + var item = g.oracle.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}", @@ -119,9 +119,9 @@ WHERE (a.""ID"" = {item.Id})", sql); [Fact] public void Format4() { - //3个 {} 时,Arguments 解析出来是分开的 - //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray [] - var item = g.oracle.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + //3涓 {} 鏃讹紝Arguments 瑙f瀽鍑烘潵鏄垎寮鐨 + //4涓 {} 鏃讹紝Arguments[1] 鍙兘瑙f瀽杩欎釜鍑烘潵锛岀劧鍚庨噷闈㈡槸 NewArray [] + var item = g.oracle.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}", @@ -279,6 +279,17 @@ WHERE (a.""ID"" = {item.Id})", sql); //SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a__Type.`Guid` as4, a__Type.`ParentId` as5, a__Type.`Name` as6, a.`Title` as7, a.`CreateTime` as8 //FROM `tb_topic` a, `TestTypeInfo` a__Type //WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%')) + + + list.Add(select.Where(a => a.Title.Contains("%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.Title + "aaa").Contains("aaa" + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name + "%")).ToList()); } [Fact] public void ToLower() diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLExpression/StringTest.cs index f5073512..291aa97c 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLExpression/StringTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +锘縰sing FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -55,7 +55,7 @@ namespace FreeSql.Tests.Odbc.PostgreSQLExpression { var fsql = g.pgsql; fsql.Delete().Where("1=1").ExecuteAffrows(); - fsql.Insert(new[] { new StringJoin01 { name = "北京" }, new StringJoin01 { name = "上海" }, new StringJoin01 { name = "深圳" }, }).ExecuteAffrows(); + fsql.Insert(new[] { new StringJoin01 { name = "鍖椾含" }, new StringJoin01 { name = "涓婃捣" }, new StringJoin01 { name = "娣卞湷" }, }).ExecuteAffrows(); var val1 = string.Join(",", fsql.Select().ToList(a => a.name)); var val2 = fsql.Select().ToList(a => string.Join(",", fsql.Select().As("b").ToList(b => b.name))); @@ -96,7 +96,7 @@ namespace FreeSql.Tests.Odbc.PostgreSQLExpression [Fact] public void Format() { - var item = g.pgsql.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + var item = g.pgsql.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}", @@ -119,9 +119,9 @@ WHERE (a.""id"" = {item.Id})", sql); [Fact] public void Format4() { - //3个 {} 时,Arguments 解析出来是分开的 - //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray [] - var item = g.pgsql.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + //3涓 {} 鏃讹紝Arguments 瑙f瀽鍑烘潵鏄垎寮鐨 + //4涓 {} 鏃讹紝Arguments[1] 鍙兘瑙f瀽杩欎釜鍑烘潵锛岀劧鍚庨噷闈㈡槸 NewArray [] + var item = g.pgsql.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}", @@ -279,6 +279,17 @@ WHERE (a.""id"" = {item.Id})", sql); //SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a__Type.`Guid` as4, a__Type.`ParentId` as5, a__Type.`Name` as6, a.`Title` as7, a.`CreateTime` as8 //FROM `tb_topic` a, `TestTypeInfo` a__Type //WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%')) + + + list.Add(select.Where(a => a.Title.Contains("%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.Title + "aaa").Contains("aaa" + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name + "%")).ToList()); } [Fact] public void ToLower() diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerExpression/StringTest.cs index 48644371..4161ee81 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerExpression/StringTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +锘縰sing FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -56,7 +56,7 @@ namespace FreeSql.Tests.Odbc.SqlServerExpression { var fsql = g.sqlserver; fsql.Delete().Where("1=1").ExecuteAffrows(); - fsql.Insert(new[] { new StringJoin01 { name = "北京" }, new StringJoin01 { name = "上海" }, new StringJoin01 { name = "深圳" }, }).ExecuteAffrows(); + fsql.Insert(new[] { new StringJoin01 { name = "鍖椾含" }, new StringJoin01 { name = "涓婃捣" }, new StringJoin01 { name = "娣卞湷" }, }).ExecuteAffrows(); var val1 = string.Join(",", fsql.Select().ToList(a => a.name)); var val2 = fsql.Select().ToList(a => string.Join(",", fsql.Select().As("b").ToList(b => b.name))); @@ -97,7 +97,7 @@ namespace FreeSql.Tests.Odbc.SqlServerExpression [Fact] public void Format() { - var item = g.sqlserver.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + var item = g.sqlserver.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}", @@ -120,9 +120,9 @@ WHERE (a.[Id] = {item.Id})", sql); [Fact] public void Format4() { - //3个 {} 时,Arguments 解析出来是分开的 - //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray [] - var item = g.sqlserver.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + //3涓 {} 鏃讹紝Arguments 瑙f瀽鍑烘潵鏄垎寮鐨 + //4涓 {} 鏃讹紝Arguments[1] 鍙兘瑙f瀽杩欎釜鍑烘潵锛岀劧鍚庨噷闈㈡槸 NewArray [] + var item = g.sqlserver.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}", @@ -190,6 +190,17 @@ WHERE (a.[Id] = {item.Id})", sql); list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title)).ToList()); list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1)).ToList()); list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name)).ToList()); + + + list.Add(select.Where(a => a.Title.Contains("%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.Title + "aaa").Contains("aaa" + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name + "%")).ToList()); } [Fact] public void ToLower() diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Sqlite.Data/Sqlite/SqliteExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Sqlite.Data/Sqlite/SqliteExpression/StringTest.cs index e1c2e382..d03a6b49 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Sqlite.Data/Sqlite/SqliteExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Sqlite.Data/Sqlite/SqliteExpression/StringTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +锘縰sing FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -55,7 +55,7 @@ namespace FreeSql.Tests.SqliteExpression { var fsql = g.sqlite; fsql.Delete().Where("1=1").ExecuteAffrows(); - fsql.Insert(new[] { new StringJoin01 { name = "北京" }, new StringJoin01 { name = "上海" }, new StringJoin01 { name = "深圳" }, }).ExecuteAffrows(); + fsql.Insert(new[] { new StringJoin01 { name = "鍖椾含" }, new StringJoin01 { name = "涓婃捣" }, new StringJoin01 { name = "娣卞湷" }, }).ExecuteAffrows(); var val1 = string.Join(",", fsql.Select().ToList(a => a.name)); var val2 = fsql.Select().ToList(a => string.Join(",", fsql.Select().As("b").ToList(b => b.name))); @@ -96,7 +96,7 @@ namespace FreeSql.Tests.SqliteExpression [Fact] public void Format() { - var item = g.sqlite.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + var item = g.sqlite.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}", @@ -119,9 +119,9 @@ WHERE (a.""Id"" = {item.Id})", sql); [Fact] public void Format4() { - //3个 {} 时,Arguments 解析出来是分开的 - //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray [] - var item = g.sqlite.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + //3涓 {} 鏃讹紝Arguments 瑙f瀽鍑烘潵鏄垎寮鐨 + //4涓 {} 鏃讹紝Arguments[1] 鍙兘瑙f瀽杩欎釜鍑烘潵锛岀劧鍚庨噷闈㈡槸 NewArray [] + var item = g.sqlite.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}", @@ -279,6 +279,17 @@ WHERE (a.""Id"" = {item.Id})", sql); //SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a__Type.`Guid` as4, a__Type.`ParentId` as5, a__Type.`Name` as6, a.`Title` as7, a.`CreateTime` as8 //FROM `tb_topic` a, `TestTypeInfo` a__Type //WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%')) + + + list.Add(select.Where(a => a.Title.Contains("%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.Title + "aaa").Contains("aaa" + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name + "%")).ToList()); } [Fact] public void ToLower() diff --git a/FreeSql.Tests/FreeSql.Tests/Dameng/DamengExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/Dameng/DamengExpression/StringTest.cs index 49d61bd8..63b6e1d1 100644 --- a/FreeSql.Tests/FreeSql.Tests/Dameng/DamengExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Dameng/DamengExpression/StringTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +锘縰sing FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -55,7 +55,7 @@ namespace FreeSql.Tests.DamengExpression { var fsql = g.dameng; fsql.Delete().Where("1=1").ExecuteAffrows(); - fsql.Insert(new[] { new StringJoin01 { name = "北京" }, new StringJoin01 { name = "上海" }, new StringJoin01 { name = "深圳" }, }).ExecuteAffrows(); + fsql.Insert(new[] { new StringJoin01 { name = "鍖椾含" }, new StringJoin01 { name = "涓婃捣" }, new StringJoin01 { name = "娣卞湷" }, }).ExecuteAffrows(); var val1 = string.Join(",", fsql.Select().ToList(a => a.name)); var val2 = fsql.Select().ToList(a => string.Join(",", fsql.Select().As("b").ToList(b => b.name))); @@ -96,7 +96,7 @@ namespace FreeSql.Tests.DamengExpression [Fact] public void Format() { - var item = g.dameng.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + var item = g.dameng.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}", @@ -119,9 +119,9 @@ WHERE (a.""ID"" = {item.Id})", sql); [Fact] public void Format4() { - //3个 {} 时,Arguments 解析出来是分开的 - //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray [] - var item = g.dameng.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + //3涓 {} 鏃讹紝Arguments 瑙f瀽鍑烘潵鏄垎寮鐨 + //4涓 {} 鏃讹紝Arguments[1] 鍙兘瑙f瀽杩欎釜鍑烘潵锛岀劧鍚庨噷闈㈡槸 NewArray [] + var item = g.dameng.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}", @@ -279,6 +279,17 @@ WHERE (a.""ID"" = {item.Id})", sql); //SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a__Type.`Guid` as4, a__Type.`ParentId` as5, a__Type.`Name` as6, a.`Title` as7, a.`CreateTime` as8 //FROM `tb_topic` a, `TestTypeInfo` a__Type //WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%')) + + + list.Add(select.Where(a => a.Title.Contains("%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.Title + "aaa").Contains("aaa" + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name + "%")).ToList()); } [Fact] public void ToLower() diff --git a/FreeSql.Tests/FreeSql.Tests/Firebird/FirebirdExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/Firebird/FirebirdExpression/StringTest.cs index 83b41cdc..7ee42826 100644 --- a/FreeSql.Tests/FreeSql.Tests/Firebird/FirebirdExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Firebird/FirebirdExpression/StringTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +锘縰sing FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -55,7 +55,7 @@ namespace FreeSql.Tests.FirebirdExpression { var fsql = g.firebird; fsql.Delete().Where("1=1").ExecuteAffrows(); - fsql.Insert(new[] { new StringJoin01 { name = "北京" }, new StringJoin01 { name = "上海" }, new StringJoin01 { name = "深圳" }, }).ExecuteAffrows(); + fsql.Insert(new[] { new StringJoin01 { name = "鍖椾含" }, new StringJoin01 { name = "涓婃捣" }, new StringJoin01 { name = "娣卞湷" }, }).ExecuteAffrows(); var val1 = string.Join(",", fsql.Select().ToList(a => a.name)); var val2 = fsql.Select().ToList(a => string.Join(",", fsql.Select().As("b").ToList(b => b.name))); @@ -96,7 +96,7 @@ namespace FreeSql.Tests.FirebirdExpression [Fact] public void Format() { - var item = g.firebird.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + var item = g.firebird.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}", @@ -119,9 +119,9 @@ WHERE (a.""ID"" = {item.Id})", sql); [Fact] public void Format4() { - //3个 {} 时,Arguments 解析出来是分开的 - //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray [] - var item = g.firebird.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + //3涓 {} 鏃讹紝Arguments 瑙f瀽鍑烘潵鏄垎寮鐨 + //4涓 {} 鏃讹紝Arguments[1] 鍙兘瑙f瀽杩欎釜鍑烘潵锛岀劧鍚庨噷闈㈡槸 NewArray [] + var item = g.firebird.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}", @@ -279,6 +279,17 @@ WHERE (a.""ID"" = {item.Id})", sql); //SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a__Type.`Guid` as4, a__Type.`ParentId` as5, a__Type.`Name` as6, a.`Title` as7, a.`CreateTime` as8 //FROM `tb_topic` a, `TestTypeInfo` a__Type //WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%')) + + + list.Add(select.Where(a => a.Title.Contains("%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.Title + "aaa").Contains("aaa" + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name + "%")).ToList()); } [Fact] public void ToLower() diff --git a/FreeSql.Tests/FreeSql.Tests/KingbaseES/KingbaseESExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/KingbaseES/KingbaseESExpression/StringTest.cs index 084f1cc2..e0f4c991 100644 --- a/FreeSql.Tests/FreeSql.Tests/KingbaseES/KingbaseESExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/KingbaseES/KingbaseESExpression/StringTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +锘縰sing FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -55,7 +55,7 @@ namespace FreeSql.Tests.KingbaseESExpression { var fsql = g.kingbaseES; fsql.Delete().Where("1=1").ExecuteAffrows(); - fsql.Insert(new[] { new StringJoin01 { name = "北京" }, new StringJoin01 { name = "上海" }, new StringJoin01 { name = "深圳" }, }).ExecuteAffrows(); + fsql.Insert(new[] { new StringJoin01 { name = "鍖椾含" }, new StringJoin01 { name = "涓婃捣" }, new StringJoin01 { name = "娣卞湷" }, }).ExecuteAffrows(); var val1 = string.Join(",", fsql.Select().ToList(a => a.name)); var val2 = fsql.Select().ToList(a => string.Join(",", fsql.Select().As("b").ToList(b => b.name))); @@ -96,7 +96,7 @@ namespace FreeSql.Tests.KingbaseESExpression [Fact] public void Format() { - var item = g.kingbaseES.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + var item = g.kingbaseES.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}", @@ -119,9 +119,9 @@ WHERE (a.""ID"" = {item.Id})", sql); [Fact] public void Format4() { - //3个 {} 时,Arguments 解析出来是分开的 - //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray [] - var item = g.kingbaseES.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + //3涓 {} 鏃讹紝Arguments 瑙f瀽鍑烘潵鏄垎寮鐨 + //4涓 {} 鏃讹紝Arguments[1] 鍙兘瑙f瀽杩欎釜鍑烘潵锛岀劧鍚庨噷闈㈡槸 NewArray [] + var item = g.kingbaseES.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}", @@ -279,6 +279,17 @@ WHERE (a.""ID"" = {item.Id})", sql); //SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a__Type.`Guid` as4, a__Type.`ParentId` as5, a__Type.`Name` as6, a.`Title` as7, a.`CreateTime` as8 //FROM `tb_topic` a, `TestTypeInfo` a__Type //WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%')) + + + list.Add(select.Where(a => a.Title.Contains("%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.Title + "aaa").Contains("aaa" + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name + "%")).ToList()); } [Fact] public void ToLower() diff --git a/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessExpression/StringTest.cs index 4a0a063a..121be667 100644 --- a/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessExpression/StringTest.cs @@ -260,6 +260,17 @@ WHERE (a.[Id] = {item.Id})", sql); var ret = fsql.Select().Where(a => a.Title.Contains(guid)).ToList(); Assert.NotEmpty(ret); Assert.Equal($"Test{guid}Contains01", ret[0].Title); + + + list.Add(select.Where(a => a.Title.Contains("%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.Title + "aaa").Contains("aaa" + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name + "%")).ToList()); } [Fact] public void ToLower() diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/StringTest.cs index 3a3ab212..f7e65567 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/StringTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +锘縰sing FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -57,7 +57,7 @@ namespace FreeSql.Tests.MySqlExpression { var fsql = g.mysql; fsql.Delete().Where("1=1").ExecuteAffrows(); - fsql.Insert(new[] { new StringJoin01 { name = "北京" }, new StringJoin01 { name = "上海" }, new StringJoin01 { name = "深圳" }, }).ExecuteAffrows(); + fsql.Insert(new[] { new StringJoin01 { name = "鍖椾含" }, new StringJoin01 { name = "涓婃捣" }, new StringJoin01 { name = "娣卞湷" }, }).ExecuteAffrows(); var val1 = string.Join(",", fsql.Select().ToList(a => a.name)); var val2 = fsql.Select().ToList(a => string.Join(",", fsql.Select().As("b").ToList(b => b.name))); @@ -98,7 +98,7 @@ namespace FreeSql.Tests.MySqlExpression [Fact] public void Format() { - var item = g.mysql.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + var item = g.mysql.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}", @@ -121,9 +121,9 @@ WHERE (a.`Id` = {item.Id})", sql); [Fact] public void Format4() { - //3个 {} 时,Arguments 解析出来是分开的 - //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray [] - var item = g.mysql.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + //3涓 {} 鏃讹紝Arguments 瑙f瀽鍑烘潵鏄垎寮鐨 + //4涓 {} 鏃讹紝Arguments[1] 鍙兘瑙f瀽杩欎釜鍑烘潵锛岀劧鍚庨噷闈㈡槸 NewArray [] + var item = g.mysql.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}", @@ -281,6 +281,17 @@ WHERE (a.`Id` = {item.Id})", sql); //SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a__Type.`Guid` as4, a__Type.`ParentId` as5, a__Type.`Name` as6, a.`Title` as7, a.`CreateTime` as8 //FROM `tb_topic` a, `TestTypeInfo` a__Type //WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%')) + + + list.Add(select.Where(a => a.Title.Contains("%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.Title + "aaa").Contains("aaa" + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name + "%")).ToList()); } [Fact] public void ToLower() diff --git a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/StringTest.cs index c15b5cae..b0483d65 100644 --- a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/StringTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +锘縰sing FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -55,7 +55,7 @@ namespace FreeSql.Tests.OracleExpression { var fsql = g.oracle; fsql.Delete().Where("1=1").ExecuteAffrows(); - fsql.Insert(new[] { new StringJoin01 { name = "北京" }, new StringJoin01 { name = "上海" }, new StringJoin01 { name = "深圳" }, }).ExecuteAffrows(); + fsql.Insert(new[] { new StringJoin01 { name = "鍖椾含" }, new StringJoin01 { name = "涓婃捣" }, new StringJoin01 { name = "娣卞湷" }, }).ExecuteAffrows(); var val1 = string.Join(",", fsql.Select().ToList(a => a.name)); var val2 = fsql.Select().ToList(a => string.Join(",", fsql.Select().As("b").ToList(b => b.name))); @@ -96,7 +96,7 @@ namespace FreeSql.Tests.OracleExpression [Fact] public void Format() { - var item = g.oracle.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + var item = g.oracle.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}", @@ -119,9 +119,9 @@ WHERE (a.""ID"" = {item.Id})", sql); [Fact] public void Format4() { - //3个 {} 时,Arguments 解析出来是分开的 - //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray [] - var item = g.oracle.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + //3涓 {} 鏃讹紝Arguments 瑙f瀽鍑烘潵鏄垎寮鐨 + //4涓 {} 鏃讹紝Arguments[1] 鍙兘瑙f瀽杩欎釜鍑烘潵锛岀劧鍚庨噷闈㈡槸 NewArray [] + var item = g.oracle.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}", @@ -279,6 +279,17 @@ WHERE (a.""ID"" = {item.Id})", sql); //SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a__Type.`Guid` as4, a__Type.`ParentId` as5, a__Type.`Name` as6, a.`Title` as7, a.`CreateTime` as8 //FROM `tb_topic` a, `TestTypeInfo` a__Type //WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%')) + + + list.Add(select.Where(a => a.Title.Contains("%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.Title + "aaa").Contains("aaa" + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name + "%")).ToList()); } [Fact] public void ToLower() diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/StringTest.cs index a4ba705e..4b0fcbeb 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/StringTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +锘縰sing FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -55,7 +55,7 @@ namespace FreeSql.Tests.PostgreSQLExpression { var fsql = g.pgsql; fsql.Delete().Where("1=1").ExecuteAffrows(); - fsql.Insert(new[] { new StringJoin01 { name = "北京" }, new StringJoin01 { name = "上海" }, new StringJoin01 { name = "深圳" }, }).ExecuteAffrows(); + fsql.Insert(new[] { new StringJoin01 { name = "鍖椾含" }, new StringJoin01 { name = "涓婃捣" }, new StringJoin01 { name = "娣卞湷" }, }).ExecuteAffrows(); var val1 = string.Join(",", fsql.Select().ToList(a => a.name)); var val2 = fsql.Select().ToList(a => string.Join(",", fsql.Select().As("b").ToList(b => b.name))); @@ -99,7 +99,7 @@ namespace FreeSql.Tests.PostgreSQLExpression [Fact] public void Format() { - var item = g.pgsql.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + var item = g.pgsql.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}", @@ -122,9 +122,9 @@ WHERE (a.""id"" = {item.Id})", sql); [Fact] public void Format4() { - //3个 {} 时,Arguments 解析出来是分开的 - //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray [] - var item = g.pgsql.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + //3涓 {} 鏃讹紝Arguments 瑙f瀽鍑烘潵鏄垎寮鐨 + //4涓 {} 鏃讹紝Arguments[1] 鍙兘瑙f瀽杩欎釜鍑烘潵锛岀劧鍚庨噷闈㈡槸 NewArray [] + var item = g.pgsql.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}", @@ -282,6 +282,17 @@ WHERE (a.""id"" = {item.Id})", sql); //SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a__Type.`Guid` as4, a__Type.`ParentId` as5, a__Type.`Name` as6, a.`Title` as7, a.`CreateTime` as8 //FROM `tb_topic` a, `TestTypeInfo` a__Type //WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%')) + + + list.Add(select.Where(a => a.Title.Contains("%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.Title + "aaa").Contains("aaa" + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name + "%")).ToList()); } [Fact] public void ToLower() diff --git a/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongExpression/StringTest.cs index fc4fd9da..0fd47168 100644 --- a/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongExpression/StringTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +锘縰sing FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -66,7 +66,7 @@ namespace FreeSql.Tests.ShenTongExpression [Fact] public void Format() { - var item = g.shentong.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + var item = g.shentong.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}", @@ -89,9 +89,9 @@ WHERE (a.""ID"" = {item.Id})", sql); [Fact] public void Format4() { - //3个 {} 时,Arguments 解析出来是分开的 - //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray [] - var item = g.shentong.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + //3涓 {} 鏃讹紝Arguments 瑙f瀽鍑烘潵鏄垎寮鐨 + //4涓 {} 鏃讹紝Arguments[1] 鍙兘瑙f瀽杩欎釜鍑烘潵锛岀劧鍚庨噷闈㈡槸 NewArray [] + var item = g.shentong.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}", @@ -249,6 +249,17 @@ WHERE (a.""ID"" = {item.Id})", sql); //SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a__Type.`Guid` as4, a__Type.`ParentId` as5, a__Type.`Name` as6, a.`Title` as7, a.`CreateTime` as8 //FROM `tb_topic` a, `TestTypeInfo` a__Type //WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%')) + + + list.Add(select.Where(a => a.Title.Contains("%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.Title + "aaa").Contains("aaa" + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name + "%")).ToList()); } [Fact] public void ToLower() diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/StringTest.cs index cbe09d85..e21d735a 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/StringTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +锘縰sing FreeSql.DataAnnotations; using FreeSql.Tests.DataContext.SqlServer; using Microsoft.EntityFrameworkCore.Internal; using System; @@ -71,7 +71,7 @@ namespace FreeSql.Tests.SqlServerExpression { var fsql = g.sqlserver; fsql.Delete().Where("1=1").ExecuteAffrows(); - fsql.Insert(new[] { new StringJoin01 { name = "北京" }, new StringJoin01 { name = "上海" }, new StringJoin01 { name = "深圳" }, }).ExecuteAffrows(); + fsql.Insert(new[] { new StringJoin01 { name = "鍖椾含" }, new StringJoin01 { name = "涓婃捣" }, new StringJoin01 { name = "娣卞湷" }, }).ExecuteAffrows(); var val1 = string.Join(",", fsql.Select().ToList(a => a.name)); var val2 = fsql.Select().ToList(a => string.Join(",", fsql.Select().As("b").ToList(b => b.name))); @@ -133,7 +133,7 @@ namespace FreeSql.Tests.SqlServerExpression { w.Id, w.UserName, - 当前角色 = string.Join(",", repo.Orm + 褰撳墠瑙掕壊 = string.Join(",", repo.Orm .Select() .LeftJoin((b, c) => b.RoleId == c.Id) .Where((b, c) => b.UserId == w.Id) @@ -142,18 +142,18 @@ namespace FreeSql.Tests.SqlServerExpression Assert.Equal(2, result.Count); Assert.Equal(users[0].Id, result[0].Id); Assert.Equal("user01", result[0].UserName); - Assert.Equal("role01,role02,role03", result[0].当前角色); + Assert.Equal("role01,role02,role03", result[0].褰撳墠瑙掕壊); Assert.Equal(users[1].Id, result[1].Id); Assert.Equal("user02", result[1].UserName); - Assert.Equal("role01,role03", result[1].当前角色); + Assert.Equal("role01,role03", result[1].褰撳墠瑙掕壊); result = repo.Select.ToList(w => new { w.Id, w.UserName, - 当前角色 = string.Join(",", repo.Orm + 褰撳墠瑙掕壊 = string.Join(",", repo.Orm .Select() .LeftJoin(b => b.t1.RoleId == b.t2.Id) .Where(b => b.t1.UserId == w.Id) @@ -162,11 +162,11 @@ namespace FreeSql.Tests.SqlServerExpression Assert.Equal(2, result.Count); Assert.Equal(users[0].Id, result[0].Id); Assert.Equal("user01", result[0].UserName); - Assert.Equal("role01,role02,role03", result[0].当前角色); + Assert.Equal("role01,role02,role03", result[0].褰撳墠瑙掕壊); Assert.Equal(users[1].Id, result[1].Id); Assert.Equal("user02", result[1].UserName); - Assert.Equal("role01,role03", result[1].当前角色); + Assert.Equal("role01,role03", result[1].褰撳墠瑙掕壊); } class StringJoin02User { @@ -223,16 +223,16 @@ namespace FreeSql.Tests.SqlServerExpression { w.Id, w.UserName, - 当前角色 = string.Join(",", w.Roles.AsSelect().ToList(b => b.RoleName)) + 褰撳墠瑙掕壊 = string.Join(",", w.Roles.AsSelect().ToList(b => b.RoleName)) }); Assert.Equal(2, result.Count); Assert.Equal(users[0].Id, result[0].Id); Assert.Equal("user01", result[0].UserName); - Assert.Equal("role01,role02,role03", result[0].当前角色); + Assert.Equal("role01,role02,role03", result[0].褰撳墠瑙掕壊); Assert.Equal(users[1].Id, result[1].Id); Assert.Equal("user02", result[1].UserName); - Assert.Equal("role01,role03", result[1].当前角色); + Assert.Equal("role01,role03", result[1].褰撳墠瑙掕壊); } class StringJoin03User { @@ -276,7 +276,7 @@ namespace FreeSql.Tests.SqlServerExpression [Fact] public void Format() { - var item = g.sqlserver.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + var item = g.sqlserver.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}", @@ -299,9 +299,9 @@ WHERE (a.[Id] = {item.Id})", sql); [Fact] public void Format4() { - //3个 {} 时,Arguments 解析出来是分开的 - //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray [] - var item = g.sqlserver.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + //3涓 {} 鏃讹紝Arguments 瑙f瀽鍑烘潵鏄垎寮鐨 + //4涓 {} 鏃讹紝Arguments[1] 鍙兘瑙f瀽杩欎釜鍑烘潵锛岀劧鍚庨噷闈㈡槸 NewArray [] + var item = g.sqlserver.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}", @@ -400,6 +400,27 @@ WHERE (a.[Id] = {item.Id})", sql); list.Add(select.Where(a => (a.TitleVarchar + "aaa").Contains(a.TitleVarchar)).ToList()); list.Add(select.Where(a => (a.TitleVarchar + "aaa").Contains(a.TitleVarchar + 1)).ToList()); list.Add(select.Where(a => (a.TitleVarchar + "aaa").Contains(a.Type.Name)).ToList()); + + + list.Add(select.Where(a => a.Title.Contains("%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.Title + "aaa").Contains("aaa" + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => a.TitleVarchar.Contains("aaa%")).ToList()); + list.Add(select.Where(a => a.TitleVarchar.Contains(a.TitleVarchar + "%")).ToList()); + list.Add(select.Where(a => a.TitleVarchar.Contains(a.TitleVarchar + 1 + "%")).ToList()); + list.Add(select.Where(a => a.TitleVarchar.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.TitleVarchar + "aaa").Contains("aaa%")).ToList()); + list.Add(select.Where(a => (a.TitleVarchar + "aaa").Contains(a.TitleVarchar + "%")).ToList()); + list.Add(select.Where(a => (a.TitleVarchar + "aaa").Contains(a.TitleVarchar + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.TitleVarchar + "aaa").Contains(a.Type.Name + "%")).ToList()); } [Fact] public void ToLower() diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/StringTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/StringTest.cs index e1c2e382..d03a6b49 100644 --- a/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/StringTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/StringTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +锘縰sing FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -55,7 +55,7 @@ namespace FreeSql.Tests.SqliteExpression { var fsql = g.sqlite; fsql.Delete().Where("1=1").ExecuteAffrows(); - fsql.Insert(new[] { new StringJoin01 { name = "北京" }, new StringJoin01 { name = "上海" }, new StringJoin01 { name = "深圳" }, }).ExecuteAffrows(); + fsql.Insert(new[] { new StringJoin01 { name = "鍖椾含" }, new StringJoin01 { name = "涓婃捣" }, new StringJoin01 { name = "娣卞湷" }, }).ExecuteAffrows(); var val1 = string.Join(",", fsql.Select().ToList(a => a.name)); var val2 = fsql.Select().ToList(a => string.Join(",", fsql.Select().As("b").ToList(b => b.name))); @@ -96,7 +96,7 @@ namespace FreeSql.Tests.SqliteExpression [Fact] public void Format() { - var item = g.sqlite.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + var item = g.sqlite.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}", @@ -119,9 +119,9 @@ WHERE (a.""Id"" = {item.Id})", sql); [Fact] public void Format4() { - //3个 {} 时,Arguments 解析出来是分开的 - //4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray [] - var item = g.sqlite.GetRepository().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") }); + //3涓 {} 鏃讹紝Arguments 瑙f瀽鍑烘潵鏄垎寮鐨 + //4涓 {} 鏃讹紝Arguments[1] 鍙兘瑙f瀽杩欎釜鍑烘潵锛岀劧鍚庨噷闈㈡槸 NewArray [] + var item = g.sqlite.GetRepository().Insert(new Topic { Clicks = 101, Title = "鎴戞槸涓浗浜101", CreateTime = DateTime.Parse("2020-7-5") }); var sql = select.WhereDynamic(item).ToSql(a => new { str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}", @@ -279,6 +279,17 @@ WHERE (a.""Id"" = {item.Id})", sql); //SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a__Type.`Guid` as4, a__Type.`ParentId` as5, a__Type.`Name` as6, a.`Title` as7, a.`CreateTime` as8 //FROM `tb_topic` a, `TestTypeInfo` a__Type //WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%')) + + + list.Add(select.Where(a => a.Title.Contains("%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => a.Title.Contains(a.Type.Name + "%")).ToList()); + + list.Add(select.Where(a => (a.Title + "aaa").Contains("aaa" + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Title + 1 + "%")).ToList()); + list.Add(select.Where(a => (a.Title + "aaa").Contains(a.Type.Name + "%")).ToList()); } [Fact] public void ToLower() diff --git a/Providers/FreeSql.Provider.ClickHouse/ClickHouseExpression.cs b/Providers/FreeSql.Provider.ClickHouse/ClickHouseExpression.cs index ee71bd93..aa4c964a 100644 --- a/Providers/FreeSql.Provider.ClickHouse/ClickHouseExpression.cs +++ b/Providers/FreeSql.Provider.ClickHouse/ClickHouseExpression.cs @@ -120,7 +120,7 @@ namespace FreeSql.ClickHouse tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; var left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; @@ -317,6 +317,12 @@ namespace FreeSql.ClickHouse case "Contains": var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"({left}) IS NULL"; + if (args0Value.Contains("%")) + { + if (exp.Method.Name == "StartsWith") return $"locate({args0Value}, {left}) = 1"; + if (exp.Method.Name == "EndsWith") return $"locate({args0Value}, {left}) = char_length({args0Value})"; + return $"locate({args0Value}, {left}) > 0"; + } if (exp.Method.Name == "StartsWith") return $"({left}) LIKE {(args0Value.EndsWith("'") ? args0Value.Insert(args0Value.Length - 1, "%") : $"concat({args0Value}, '%')")}"; if (exp.Method.Name == "EndsWith") return $"({left}) LIKE {(args0Value.StartsWith("'") ? args0Value.Insert(1, "%") : $"concat('%', {args0Value})")}"; if (args0Value.StartsWith("'") && args0Value.EndsWith("'")) return $"({left}) LIKE {args0Value.Insert(1, "%").Insert(args0Value.Length, "%")}"; diff --git a/Providers/FreeSql.Provider.Custom/CustomExpression.cs b/Providers/FreeSql.Provider.Custom/CustomExpression.cs index a3f5c1eb..b367ad64 100644 --- a/Providers/FreeSql.Provider.Custom/CustomExpression.cs +++ b/Providers/FreeSql.Provider.Custom/CustomExpression.cs @@ -122,7 +122,7 @@ namespace FreeSql.Custom tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; var left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; diff --git a/Providers/FreeSql.Provider.Dameng/DamengExpression.cs b/Providers/FreeSql.Provider.Dameng/DamengExpression.cs index c2be2bb6..5ff640a9 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengExpression.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengExpression.cs @@ -122,7 +122,7 @@ namespace FreeSql.Dameng tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; var left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; @@ -301,6 +301,12 @@ namespace FreeSql.Dameng case "Contains": var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"({left}) IS NULL"; + if (args0Value.Contains("%")) + { + if (exp.Method.Name == "StartsWith") return $"instr({args0Value}, {left}) = 1"; + if (exp.Method.Name == "EndsWith") return $"instr({args0Value}, {left}) = length({args0Value})"; + return $"instr({args0Value}, {left}) > 0"; + } if (exp.Method.Name == "StartsWith") return $"({left}) LIKE {(args0Value.EndsWith("'") ? args0Value.Insert(args0Value.Length - 1, "%") : $"(to_char({args0Value})||'%')")}"; if (exp.Method.Name == "EndsWith") return $"({left}) LIKE {(args0Value.StartsWith("'") ? args0Value.Insert(1, "%") : $"('%'||to_char({args0Value}))")}"; if (args0Value.StartsWith("'") && args0Value.EndsWith("'")) return $"({left}) LIKE {args0Value.Insert(1, "%").Insert(args0Value.Length, "%")}"; diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs b/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs index 3f9b3573..c28b2000 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdExpression.cs @@ -109,7 +109,7 @@ namespace FreeSql.Firebird tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; var left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; @@ -288,6 +288,12 @@ namespace FreeSql.Firebird case "Contains": var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"({left}) IS NULL"; + if (args0Value.Contains("%")) + { + if (exp.Method.Name == "StartsWith") return $"position({args0Value}, {left}) = 1"; + if (exp.Method.Name == "EndsWith") return $"position({args0Value}, {left}) = char_length({args0Value})"; + return $"position({args0Value}, {left}) > 0"; + } if (exp.Method.Name == "StartsWith") return $"({left}) LIKE {(args0Value.EndsWith("'") ? args0Value.Insert(args0Value.Length - 1, "%") : $"({args0Value})||'%'")}"; if (exp.Method.Name == "EndsWith") return $"({left}) LIKE {(args0Value.StartsWith("'") ? args0Value.Insert(1, "%") : $"'%'||({args0Value})")}"; if (args0Value.StartsWith("'") && args0Value.EndsWith("'")) return $"({left}) CONTAINING {args0Value}"; diff --git a/Providers/FreeSql.Provider.GBase/GBaseExpression.cs b/Providers/FreeSql.Provider.GBase/GBaseExpression.cs index 23068076..deb0dbdc 100644 --- a/Providers/FreeSql.Provider.GBase/GBaseExpression.cs +++ b/Providers/FreeSql.Provider.GBase/GBaseExpression.cs @@ -109,7 +109,7 @@ namespace FreeSql.GBase tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; var left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; @@ -288,6 +288,12 @@ namespace FreeSql.GBase case "Contains": var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"({left}) IS NULL"; + if (args0Value.Contains("%")) + { + if (exp.Method.Name == "StartsWith") return $"instr({args0Value}, {left}) = 1"; + if (exp.Method.Name == "EndsWith") return $"instr({args0Value}, {left}) = char_length({args0Value})"; + return $"instr({args0Value}, {left}) > 0"; + } if (exp.Method.Name == "StartsWith") return $"({left}) LIKE {(args0Value.EndsWith("'") ? args0Value.Insert(args0Value.Length - 1, "%") : $"({args0Value})||'%'")}"; if (exp.Method.Name == "EndsWith") return $"({left}) LIKE {(args0Value.StartsWith("'") ? args0Value.Insert(1, "%") : $"'%'||({args0Value})")}"; if (args0Value.StartsWith("'") && args0Value.EndsWith("'")) return $"({left}) LIKE {args0Value.Insert(1, "%").Insert(args0Value.Length, "%")}"; diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs index ff566853..1d2127ad 100644 --- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs +++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs @@ -146,7 +146,7 @@ namespace FreeSql.KingbaseES tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; @@ -368,6 +368,12 @@ namespace FreeSql.KingbaseES case "Contains": var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"({left}) IS NULL"; + if (args0Value.Contains("%")) + { + if (exp.Method.Name == "StartsWith") return $"strpos({args0Value}, {left}) = 1"; + if (exp.Method.Name == "EndsWith") return $"strpos({args0Value}, {left}) = char_length({args0Value})"; + return $"strpos({args0Value}, {left}) > 0"; + } var likeOpt = "LIKE"; if (exp.Arguments.Count > 1) { diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs index 4b7624c5..bdea3735 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessExpression.cs @@ -92,7 +92,7 @@ namespace FreeSql.MsAccess tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; var left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; @@ -262,6 +262,12 @@ namespace FreeSql.MsAccess case "Contains": var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"({left}) IS NULL"; + if (args0Value.Contains("%")) + { + if (exp.Method.Name == "StartsWith") return $"instr({args0Value}, {left}) = 1"; + if (exp.Method.Name == "EndsWith") return $"instr({args0Value}, {left}) = len({args0Value})"; + return $"instr({args0Value}, {left}) > 0"; + } if (exp.Method.Name == "StartsWith") return $"({left}) LIKE {(args0Value.EndsWith("'") ? args0Value.Insert(args0Value.Length - 1, "%") : $"({args0Value}+'%')")}"; if (exp.Method.Name == "EndsWith") return $"({left}) LIKE {(args0Value.StartsWith("'") ? args0Value.Insert(1, "%") : $"('%'+{args0Value})")}"; if (args0Value.StartsWith("'") && args0Value.EndsWith("'")) return $"({left}) LIKE {args0Value.Insert(1, "%").Insert(args0Value.Length, "%")}"; diff --git a/Providers/FreeSql.Provider.MySql/MySqlExpression.cs b/Providers/FreeSql.Provider.MySql/MySqlExpression.cs index 01a2f7c1..0506abae 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlExpression.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlExpression.cs @@ -120,7 +120,7 @@ namespace FreeSql.MySql tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; var left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; @@ -300,6 +300,12 @@ namespace FreeSql.MySql case "Contains": var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"({left}) IS NULL"; + if (args0Value.Contains("%")) + { + if (exp.Method.Name == "StartsWith") return $"locate({args0Value}, {left}) = 1"; + if (exp.Method.Name == "EndsWith") return $"locate({args0Value}, {left}) = char_length({args0Value})"; + return $"locate({args0Value}, {left}) > 0"; + } if (exp.Method.Name == "StartsWith") return $"({left}) LIKE {(args0Value.EndsWith("'") ? args0Value.Insert(args0Value.Length - 1, "%") : $"concat({args0Value}, '%')")}"; if (exp.Method.Name == "EndsWith") return $"({left}) LIKE {(args0Value.StartsWith("'") ? args0Value.Insert(1, "%") : $"concat('%', {args0Value})")}"; if (args0Value.StartsWith("'") && args0Value.EndsWith("'")) return $"({left}) LIKE {args0Value.Insert(1, "%").Insert(args0Value.Length, "%")}"; diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengExpression.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengExpression.cs index 5a669589..5f768696 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengExpression.cs @@ -122,7 +122,7 @@ namespace FreeSql.Odbc.Dameng tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; var left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; @@ -301,6 +301,12 @@ namespace FreeSql.Odbc.Dameng case "Contains": var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"({left}) IS NULL"; + if (args0Value.Contains("%")) + { + if (exp.Method.Name == "StartsWith") return $"instr({args0Value}, {left}) = 1"; + if (exp.Method.Name == "EndsWith") return $"instr({args0Value}, {left}) = length({args0Value})"; + return $"instr({args0Value}, {left}) > 0"; + } if (exp.Method.Name == "StartsWith") return $"({left}) LIKE {(args0Value.EndsWith("'") ? args0Value.Insert(args0Value.Length - 1, "%") : $"(to_char({args0Value})||'%')")}"; if (exp.Method.Name == "EndsWith") return $"({left}) LIKE {(args0Value.StartsWith("'") ? args0Value.Insert(1, "%") : $"('%'||to_char({args0Value}))")}"; if (args0Value.StartsWith("'") && args0Value.EndsWith("'")) return $"({left}) LIKE {args0Value.Insert(1, "%").Insert(args0Value.Length, "%")}"; diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs index 67adbb3d..49ca81c2 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs @@ -122,7 +122,7 @@ namespace FreeSql.Odbc.Default tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; var left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESExpression.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESExpression.cs index fda2afea..6d36c321 100644 --- a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESExpression.cs @@ -146,7 +146,7 @@ namespace FreeSql.Odbc.KingbaseES tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; @@ -368,6 +368,12 @@ namespace FreeSql.Odbc.KingbaseES case "Contains": var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"({left}) IS NULL"; + if (args0Value.Contains("%")) + { + if (exp.Method.Name == "StartsWith") return $"strpos({args0Value}, {left}) = 1"; + if (exp.Method.Name == "EndsWith") return $"strpos({args0Value}, {left}) = char_length({args0Value})"; + return $"strpos({args0Value}, {left}) > 0"; + } var likeOpt = "LIKE"; if (exp.Arguments.Count > 1) { diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs index 25572732..1e6fdfb8 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs @@ -118,7 +118,7 @@ namespace FreeSql.Odbc.MySql tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; var left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; @@ -298,6 +298,12 @@ namespace FreeSql.Odbc.MySql case "Contains": var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"({left}) IS NULL"; + if (args0Value.Contains("%")) + { + if (exp.Method.Name == "StartsWith") return $"locate({args0Value}, {left}) = 1"; + if (exp.Method.Name == "EndsWith") return $"locate({args0Value}, {left}) = char_length({args0Value})"; + return $"locate({args0Value}, {left}) > 0"; + } if (exp.Method.Name == "StartsWith") return $"({left}) LIKE {(args0Value.EndsWith("'") ? args0Value.Insert(args0Value.Length - 1, "%") : $"concat({args0Value}, '%')")}"; if (exp.Method.Name == "EndsWith") return $"({left}) LIKE {(args0Value.StartsWith("'") ? args0Value.Insert(1, "%") : $"concat('%', {args0Value})")}"; if (args0Value.StartsWith("'") && args0Value.EndsWith("'")) return $"({left}) LIKE {args0Value.Insert(1, "%").Insert(args0Value.Length, "%")}"; diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs index 3399c519..e6b7e9da 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs @@ -122,7 +122,7 @@ namespace FreeSql.Odbc.Oracle tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; var left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; @@ -301,6 +301,12 @@ namespace FreeSql.Odbc.Oracle case "Contains": var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"({left}) IS NULL"; + if (args0Value.Contains("%")) + { + if (exp.Method.Name == "StartsWith") return $"instr({args0Value}, {left}) = 1"; + if (exp.Method.Name == "EndsWith") return $"instr({args0Value}, {left}) = length({args0Value})"; + return $"instr({args0Value}, {left}) > 0"; + } if (exp.Method.Name == "StartsWith") return $"({left}) LIKE {(args0Value.EndsWith("'") ? args0Value.Insert(args0Value.Length - 1, "%") : $"(to_char({args0Value})||'%')")}"; if (exp.Method.Name == "EndsWith") return $"({left}) LIKE {(args0Value.StartsWith("'") ? args0Value.Insert(1, "%") : $"('%'||to_char({args0Value}))")}"; if (args0Value.StartsWith("'") && args0Value.EndsWith("'")) return $"({left}) LIKE {args0Value.Insert(1, "%").Insert(args0Value.Length, "%")}"; diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs index ba8af8db..b5d78775 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs @@ -146,7 +146,7 @@ namespace FreeSql.Odbc.PostgreSQL tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; @@ -390,6 +390,12 @@ namespace FreeSql.Odbc.PostgreSQL case "Contains": var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"({left}) IS NULL"; + if (args0Value.Contains("%")) + { + if (exp.Method.Name == "StartsWith") return $"strpos({args0Value}, {left}) = 1"; + if (exp.Method.Name == "EndsWith") return $"strpos({args0Value}, {left}) = char_length({args0Value})"; + return $"strpos({args0Value}, {left}) > 0"; + } var likeOpt = "LIKE"; if (exp.Arguments.Count > 1) { diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs index 1242eccf..6a938b37 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs @@ -128,7 +128,7 @@ namespace FreeSql.Odbc.SqlServer tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; var left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; @@ -321,6 +321,12 @@ namespace FreeSql.Odbc.SqlServer case "Contains": var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"({left}) IS NULL"; + if (args0Value.Contains("%")) + { + if (exp.Method.Name == "StartsWith") return $"charindex({args0Value}, {left}) = 1"; + if (exp.Method.Name == "EndsWith") return $"charindex({args0Value}, {left}) = len({args0Value})"; + return $"charindex({args0Value}, {left}) > 0"; + } if (exp.Method.Name == "StartsWith") return $"({left}) LIKE {(args0Value.EndsWith("'") ? args0Value.Insert(args0Value.Length - 1, "%") : $"(cast({args0Value} as nvarchar(max))+'%')")}"; if (exp.Method.Name == "EndsWith") return $"({left}) LIKE {(args0Value.StartsWith("'") ? args0Value.Insert(1, "%") : $"('%'+cast({args0Value} as nvarchar(max)))")}"; if (args0Value.StartsWith("'") && args0Value.EndsWith("'")) return $"({left}) LIKE {args0Value.Insert(1, "%").Insert(args0Value.Length, "%")}"; diff --git a/Providers/FreeSql.Provider.Oracle/OracleExpression.cs b/Providers/FreeSql.Provider.Oracle/OracleExpression.cs index 825e9f54..0fa8869f 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleExpression.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleExpression.cs @@ -122,7 +122,7 @@ namespace FreeSql.Oracle tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; var left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; @@ -301,6 +301,12 @@ namespace FreeSql.Oracle case "Contains": var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"({left}) IS NULL"; + if (args0Value.Contains("%")) + { + if (exp.Method.Name == "StartsWith") return $"instr({args0Value}, {left}) = 1"; + if (exp.Method.Name == "EndsWith") return $"instr({args0Value}, {left}) = length({args0Value})"; + return $"instr({args0Value}, {left}) > 0"; + } if (exp.Method.Name == "StartsWith") return $"({left}) LIKE {(args0Value.EndsWith("'") ? args0Value.Insert(args0Value.Length - 1, "%") : $"(to_char({args0Value})||'%')")}"; if (exp.Method.Name == "EndsWith") return $"({left}) LIKE {(args0Value.StartsWith("'") ? args0Value.Insert(1, "%") : $"('%'||to_char({args0Value}))")}"; if (args0Value.StartsWith("'") && args0Value.EndsWith("'")) return $"({left}) LIKE {args0Value.Insert(1, "%").Insert(args0Value.Length, "%")}"; diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs index ca3adb2c..b9b8add0 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs @@ -177,7 +177,7 @@ namespace FreeSql.PostgreSQL tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; @@ -421,6 +421,12 @@ namespace FreeSql.PostgreSQL case "Contains": var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"({left}) IS NULL"; + if (args0Value.Contains("%")) + { + if (exp.Method.Name == "StartsWith") return $"strpos({args0Value}, {left}) = 1"; + if (exp.Method.Name == "EndsWith") return $"strpos({args0Value}, {left}) = char_length({args0Value})"; + return $"strpos({args0Value}, {left}) > 0"; + } var likeOpt = "LIKE"; if (exp.Arguments.Count > 1) { diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs index ed6864ff..32051a6b 100644 --- a/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs +++ b/Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs @@ -128,7 +128,7 @@ namespace FreeSql.ShenTong tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; @@ -345,6 +345,12 @@ namespace FreeSql.ShenTong case "Contains": var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"({left}) IS NULL"; + if (args0Value.Contains("%")) + { + if (exp.Method.Name == "StartsWith") return $"strpos({args0Value}, {left}) = 1"; + if (exp.Method.Name == "EndsWith") return $"strpos({args0Value}, {left}) = char_length({args0Value})"; + return $"strpos({args0Value}, {left}) > 0"; + } var likeOpt = "LIKE"; if (exp.Arguments.Count > 1) { diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs index eaaa835c..7ea9853a 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs @@ -127,7 +127,7 @@ namespace FreeSql.SqlServer tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; var left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; @@ -320,6 +320,12 @@ namespace FreeSql.SqlServer case "Contains": var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"({left}) IS NULL"; + if (args0Value.Contains("%")) + { + if (exp.Method.Name == "StartsWith") return $"charindex({args0Value}, {left}) = 1"; + if (exp.Method.Name == "EndsWith") return $"charindex({args0Value}, {left}) = len({args0Value})"; + return $"charindex({args0Value}, {left}) > 0"; + } if (exp.Method.Name == "StartsWith") return $"({left}) LIKE {(args0Value.EndsWith("'") ? args0Value.Insert(args0Value.Length - 1, "%") : $"(cast({args0Value} as nvarchar(max))+'%')")}"; if (exp.Method.Name == "EndsWith") return $"({left}) LIKE {(args0Value.StartsWith("'") ? args0Value.Insert(1, "%") : $"('%'+cast({args0Value} as nvarchar(max)))")}"; if (args0Value.StartsWith("'") && args0Value.EndsWith("'")) return $"({left}) LIKE {args0Value.Insert(1, "%").Insert(args0Value.Length, "%")}"; diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs b/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs index 9c227a34..9a3bb1d0 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteExpression.cs @@ -118,7 +118,7 @@ namespace FreeSql.Sqlite tsc.SetMapColumnTmp(null); var args1 = getExp(callExp.Arguments[argIndex]); var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp); - var oldDbParams = objExp.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug + var oldDbParams = objExp?.NodeType == ExpressionType.MemberAccess ? tsc.SetDbParamsReturnOld(null) : null; //#900 UseGenerateCommandParameterWithLambda(true) 瀛愭煡璇 bug銆佷互鍙 #1173 鍙傛暟鍖 bug tsc.isNotSetMapColumnTmp = true; var left = objExp == null ? null : getExp(objExp); tsc.isNotSetMapColumnTmp = false; @@ -297,6 +297,12 @@ namespace FreeSql.Sqlite case "Contains": var args0Value = getExp(exp.Arguments[0]); if (args0Value == "NULL") return $"({left}) IS NULL"; + if (args0Value.Contains("%")) + { + if (exp.Method.Name == "StartsWith") return $"instr({args0Value}, {left}) = 1"; + if (exp.Method.Name == "EndsWith") return $"instr({args0Value}, {left}) = length({args0Value})"; + return $"instr({args0Value}, {left}) > 0"; + } if (exp.Method.Name == "StartsWith") return $"({left}) LIKE {(args0Value.EndsWith("'") ? args0Value.Insert(args0Value.Length - 1, "%") : $"({args0Value})||'%'")}"; if (exp.Method.Name == "EndsWith") return $"({left}) LIKE {(args0Value.StartsWith("'") ? args0Value.Insert(1, "%") : $"'%'||({args0Value})")}"; if (args0Value.StartsWith("'") && args0Value.EndsWith("'")) return $"({left}) LIKE {args0Value.Insert(1, "%").Insert(args0Value.Length, "%")}";