心不死则道不生,欲不灭则道不存
排名
1
文章
877
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

sqlsugar 逗号分割字符串的多匹配,相当于动态Contains,多个Contains,根据列表动态like,动态多条件,动态或者or。匹配多个值,多对多的匹配,数据库存储的也是多个值

245人阅读 2025/6/12 10:55 总访问:5551691 评论:0 收藏:0 手机
分类: .NET


下面说的情况适用于数据库里边存储的字段也是多个值,比如数据库里边的UserType里边的值可能是”2,3,4”或者”3,5”这种,然后传递”2,4”,可以把2拿去匹配一次,在把4拿去匹配一次,相当于就是多对多的匹配了。如果数据库里边存储的是单个值,那么就非常简单了,直接一个Contains就解决了,比如ChoiseLevels.Contains(a.MessageLevel),不要把这种简单的情况与这里说的情况搞混了哦

方案一:使用 LINQ 和 Any 方法

这种方法先将输入的字符串分割成数组,然后检查 UserType 是否包含数组中的任何一个值:

  1. // 假设 input.UserType = "2,3"
  2. var userTypes = input.UserType.Split(',', StringSplitOptions.RemoveEmptyEntries);
  3. var query = db.Queryable<User>()
  4. .Where(a => userTypes.Any(type => a.UserType.Contains(type)))
  5. .ToList();

一般需要加上为空判断的话可以这样写

  1. string[]? choiseLevels = null;
  2. if (!string.IsNullOrWhiteSpace(input.ChoiseLevels))
  3. {
  4. choiseLevels = input.ChoiseLevels.Split(',', StringSplitOptions.RemoveEmptyEntries);
  5. }

然后配合一个whereif就可以了

  1. .WhereIF(choiseLevels != null,a=> choiseLevels.Any(type => a.MessageLevel.Contains(type)))

方案二:使用动态条件构建器

如果需要更灵活的构建方式,可以使用 SqlSugar 的动态条件构建:

  1. var userTypes = input.UserType.Split(',', StringSplitOptions.RemoveEmptyEntries);
  2. var expression = Expressionable.Create<User>();
  3. foreach (var type in userTypes)
  4. {
  5. expression.Or(a => a.UserType.Contains(type));
  6. }
  7. var query = db.Queryable<User>()
  8. .Where(expression.ToExpression())
  9. .ToList();

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

EF Core sqlsugarFreeSqlDapper EF 对比

EF Core优点:微软官方ORM功能强大,支持模式多文档齐全缺点:1.复杂查询生成的SQL语句性能太差(对操作功力要求高)2.一些...

sqlsugar官方文档与基本用法sqlsugar直接执行sqlsqlsugar分组函数。sqlsugar官网。sqlsugar在直接执行sql中使用In。sqlsugar 返回第一行第一列。Sql分页

sqlsugar官方文档https://www.donet5.com/Home/DocSql分页https://www.donet5.com/Home/Doc?typeId=1197sqlsugar基本用法...

sqlsugarScope与sqlsugarClient区别

SqlSugarScope原理它是对SqlSugarClient的封装让他支持线程安全,并且在不同上下文自动new 出 SqlSugarClient,在编写代码...

sqlsugar生成实体

添加依赖:&lt;ItemGroup&gt; &lt;PackageReference Include=&quot;SqlSugarCore&quot; Version=&quot;5.0.5.4&quot; ...

sqlsugar生成实体sqlsugar生成Model

添加依赖:&lt;ItemGroup&gt; &lt;PackageReference Include=&quot;SqlSugarCore&quot; Version=&quot;5.0.0.15&quot;...

sqlsugar dbfirst 模型生成实体生成

非常简单贴一下代码: //参数1:路径 参数2:命名空间。IsCreateAttribute 代表生成SqlSugar特性 db.DbFirst.IsCreateAt...

sqlsugar 对接mysql分表。sqlsguar分表注意事项。分表思路通过日期获取分表表名等

官方文档:https://www.donet5.com/Home/Doc?typeId=1201 sqlsguar分表注意事项注意一:需要有一个分表字段,插入的时候...

sqlsugar 不映射字段sqlsugar 忽略字段。sqlsugar字段不与数据库表映射sqlsugar定义某属性不映射到数据库

利用特性SugarColumn,将IsIgnore设置为True即可! [SugarColumn(IsIgnore = true)] public string Token { get; set; }

vue elementui分页条使用与.net后台sqlsugar等分页方法使用。常用分页模板

分页条&lt;div style=&quot;margin-top: 20px;margin-bottom: 20px;text-align: center;&quot;&gt; &lt;el-pagination ...

.NET ORM核心功能之导航属性- EFCore和 sqlsugarsqlsugar 2023年导航新功能

[TOC]导航属性导航属性是作为.NET ORM核心功能中的核心,在SqlSugar没有支持导航属性前,都说只是一个高级DbHelper, 经过3...

sqlsugar in多字段linq 多字段查询多对多查询方式。 in and

sqlsugar in多字段版本&gt;=5.1.4.67-preview04 List&lt;OrderItem&gt; list=xxx; db.Queryable&lt;OrderItem&gt;().Wh...

基础领域驱动DDD框架搭建配合sqlsugar基础架构搭建。使用仓储。.net使用Autofac实现自动注入。通过特性封装事务特性实现工作单元

[TOC]一:创建一个WebApi项目随便取名一个,比如TeacherCertificationAPI效果如下: 顺便在appsettings.json中配置一下...

sqlsugar 树型递归查询。UtilMethods.BuildTree 用法

sqlsugar 树型递归查询官方文档:https://www.donet5.com/home/doc?masterId=1&amp;typeId=2311 UtilMethods.BuildTree ...

多对多的查询解析sqlsugar 多对多的名称查询解析

多对多解析名称的常用步骤代码如下: #region 查询小组分配的管理员(一个小组可以分配多个管理员) List&lt;string&gt; ...

css弹性盒子flex布局

css弹性盒子由于版本不同浏览器问题造成了一些不同的写法display:flexbox;在google浏览器中如果使用下面的写法就不行displa...