sqlsugar 逗号分割字符串的多匹配,相当于动态Contains,多个Contains,根据列表动态like,动态多条件,动态或者or。匹配多个值,多对多的匹配,数据库存储的也是多个值 电脑版发表于:2025/6/12 10:55 tn2>下面说的情况适用于数据库里边存储的字段也是多个值,比如数据库里边的UserType里边的值可能是"2,3,4"或者"3,5"这种,然后传递"2,4",可以把2拿去匹配一次,在把4拿去匹配一次,相当于就是多对多的匹配了。如果数据库里边存储的是单个值,那么就非常简单了,直接一个Contains就解决了,比如ChoiseLevels.Contains(a.MessageLevel),不要把这种简单的情况与这里说的情况搞混了哦 [TOC] ### 方案一:使用 LINQ 和 Any 方法 这种方法先将输入的字符串分割成数组,然后检查 UserType 是否包含数组中的任何一个值: ``` // 假设 input.UserType = "2,3" var userTypes = input.UserType.Split(',', StringSplitOptions.RemoveEmptyEntries); var query = db.Queryable<User>() .Where(a => userTypes.Any(type => a.UserType.Contains(type))) .ToList(); ``` **一般需要加上为空判断的话可以这样写** ``` string[]? choiseLevels = null; if (!string.IsNullOrWhiteSpace(input.ChoiseLevels)) { choiseLevels = input.ChoiseLevels.Split(',', StringSplitOptions.RemoveEmptyEntries); } ``` 然后配合一个whereif就可以了 ``` .WhereIF(choiseLevels != null,a=> choiseLevels.Any(type => a.MessageLevel.Contains(type))) ``` ### 方案二:使用动态条件构建器 如果需要更灵活的构建方式,可以使用 SqlSugar 的动态条件构建: ``` var userTypes = input.UserType.Split(',', StringSplitOptions.RemoveEmptyEntries); var expression = Expressionable.Create<User>(); foreach (var type in userTypes) { expression.Or(a => a.UserType.Contains(type)); } var query = db.Queryable<User>() .Where(expression.ToExpression()) .ToList(); ```