多列In查询时,若条件为HashSet会报空引用 返回
SqlSugar
沟通中
1
266

悬赏:0 飞吻
如Demo。HashSet作为一个正常的IEnumerable,从直觉上讲理应能够作为此处的条件集合,但却报了空引用。把HashSet转为List再作为条件集合就OK
using Microsoft.Extensions.Configuration; using SqlSugar; namespace SqlSugarDemo; [SugarTable] public class MyEntity12260845 { [SugarColumn(IsPrimaryKey = true, Length = 30)] public string Id { get; set; } public string School { get; set; } public string Major { get; set; } } public class HashSetNullReferenceException { public static void Run() { ISqlSugarClient db = GetDb(); db.CodeFirst.InitTables<MyEntity12260845>(); List<MyEntity12260845> entities = [ new MyEntity12260845 { Id = SnowFlakeSingle.Instance.NextId().ToString(), School = "School1", Major = "Major1" }, new MyEntity12260845 { Id = SnowFlakeSingle.Instance.NextId().ToString(), School = "School2", Major = "Major2" }, new MyEntity12260845 { Id = SnowFlakeSingle.Instance.NextId().ToString(), School = "School3", Major = "Major3" }, new MyEntity12260845 { Id = SnowFlakeSingle.Instance.NextId().ToString(), School = "School4", Major = "Major4" } ]; db.Insertable(entities).ExecuteCommand(); var hashSet = entities.Skip(1).Take(2).Select(e => new { e.School, e.Major }).ToHashSet(); var list = hashSet.ToList(); // 正常情况: List<MyEntity12260845> res0 = db.Queryable<MyEntity12260845>() .Where(e => list.Any(c => c.School == e.School && c.Major == e.School)) .ToList(); // 空引用:hashSet为null List<MyEntity12260845> res1 = db.Queryable<MyEntity12260845>() .Where(e => hashSet.Any(c => c.School == e.School && c.Major == e.School)) .ToList(); } private static ISqlSugarClient GetDb() { ConfigurationBuilder configBuilder = new(); configBuilder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); IConfigurationRoot configRoot = configBuilder.Build(); SqlSugarClient Db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = configRoot["connStr"], DbType = DbType.Oracle, IsAutoCloseConnection = true }, db => { db.Aop.OnLogExecuting = (sql, pars) => { //获取原生SQL推荐 5.1.4.63 性能OK Console.WriteLine(UtilMethods.GetNativeSql(sql, pars)); //获取无参数化SQL 对性能有影响,特别大的SQL参数多的,调试使用 //Console.WriteLine(UtilMethods.GetSqlString(DbType.SqlServer,sql,pars)) }; //注意多租户 有几个设置几个 //db.GetConnection(i).Aop }); return Db; } }
热忱回答(1)
-
fate sta VIP0
2024/12/26先用list, haset这个类型C#一般很少有人用 后续在做兼容
0 回复