Sql语句生成问题 返回
cfyuiorw 发布于2025/11/14
项目升级至 .NET 10 在 where 的 表达式中使用 contains 生成的 sql 语句不正确
环境:.NET 10 MySql 8.4
如下图所示生成的sql语句是 SELECT `id` FROM `student` WHERE (1,2,3 like concat('%',`id`,'%'))
而不是 SELECT `id` FROM `student` WHERE (`id` in (1,2,3))
执行该语句 mysql 报错 Operand should contain 1 column(s)
但是将 int?[] 类型改为 int[] 类型 可以生成正确的 sql 语句
在 .NET 8 .NET9 上 , int?[]类型 和 int[] 类型都可以生成正确的语句
项目中有大量的 int?[] 这种类型的数组,将代码中所有 int?[] 全部改写过于繁琐
请问这是否属于bug,如果能修复,希望下个版本能修复

热忱回答(7)
-
fate sta VIP0
2025/11/14好的。我处理一下。
0 回复 -
fate sta VIP0
2025/11/15int[]? ids = new int[] { 1, 2 }; SqlSugarClient Db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = "datasource=demo.db", DbType = DbType.Sqlite, IsAutoCloseConnection = true }); Db.Aop.OnLogExecuting = (s, y) => { Console.WriteLine(s); }; Db.CodeFirst.InitTables<Class1>(); try { var list=Db.Queryable<Class1>().Where(i => ids.Contains(i.Id)).ToList(); } catch (Exception ex) { throw; } public class Class1 { public int Id { get; set; } }我用DEMO没重现你的问题。你的VS补丁是最新的吗。
0 回复 -
fate sta VIP0
2025/11/15
0 回复 -
cfyuiorw VIP0
2025/11/17@fate sta:
你写的是 int[]?,我测试了也没问题。
有问题的是int?[],就是有一个数组,里面的类型是 int 的可空类型 int?
0 回复 -
N VIP0
2025/11/17
逗逼微软没有做方法重载而是偷懒
0 回复 -
fate sta VIP0
2025/11/17我处理一下。
0 回复 -
fate sta VIP0
2025/11/17升级到最新版本208已修复
0 回复