TNBLOG
首页
博客
视频
资源
问答
猿趣
手机
关于
搜索
收藏
便签
笔记
消息
创作
登录
忆点点
情不知从何起,一往而情深
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.net
35篇
.net core
15篇
cdn
1篇
云服务
1篇
前端
71篇
后端
6篇
随笔
19篇
架构
1篇
linux
6篇
git
3篇
virtualbox
1篇
app
1篇
英语
4篇
redis
4篇
docker
4篇
更多
mysql
6篇
sqlsugar
4篇
uni_app
4篇
数据库
1篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术
原
sqlsugar in多字段,linq 多字段查询,多对多查询方式
155
人阅读
2024/3/29 9:58
总访问:
778440
评论:
0
收藏:
0
手机
分类:
sqlsugar
#### sqlsugar in多字段 版本>=5.1.4.67-preview04 ``` List<OrderItem> list=xxx; db.Queryable<OrderItem>().Where(it => list.Any(s => s.Id == it.Id && s.Name == it.Name)) //也可以用动态表达式拼OR实现 ``` 他生成的sql不是 in (a,b)这种,其实想一下他in的不是一个而是一个集合,所以这种处理成sql也不好处理,写sql的话in一个集合一般里边是一个子查询,是这样的 a,b in (select a,b from users) 。 他生成的sql是一条就是一个and,每条之间用or连接。(a=xx and b=yy) or (a=xx1 and b=yy2)。 #### linq 多字段查询 这里的haveLabTaskResults是一个内存中的集合,多字段查询也是用any,这种在内存中处理的其实很好理解 ``` haveClassAndCourseList = classAndCourseList.Where(a => haveLabTaskResults.Any(i => i.ClassID == a.ClassID && i.CourseId == a.CourseID)).ToList(); ``` #### 多对多查询方式 多对多查询方式其实就应该是用in多字段的方式才对。比如班级与课程是多对多的,班级和课程提交了很多作业,需要查询出来这些班级和课程提交的作业,不能直接and这种组合对了,应该是一条就是一个and,每条之间用or连接才对。 **比如这种先取出来班级与课程集合在去用and连接是不对的** ``` // 班级与课程的集合 var classAndCourseList = classAndCourse.ToList(); // 拿到里边涉及到的课程和班级 List<string> haveCourseIDList = classAndCourseList.Select(a => a.CourseID).Distinct().ToList(); List<string> classIdList = classAndCourseList.Select(a => a.ClassID).Distinct().ToList(); // 找到这些班级和课程提交的作业 var labTaskResults = Db.Queryable<LabTaskResult>().Where((lbt) => classIdList.Contains(lbt.ClassID) && haveCourseIDList.Contains(lbt.CourseID) && lbt.TaskType == 4).ToList(); ``` 这种是不对的,这种组合可能会多出来数据,数据可能会比实际的多,只多不少, **正确的写法应该是一条就是一个and,每条之间用or连接** 不需要先取出来班级和课程的集合,直接用sqlsugar哪个语法去in哪个班级和课程集合即可 ``` // 班级与课程的集合 var classAndCourseList = classAndCourse.ToList(); labTaskResults = Db.Queryable<LabTaskResult>().Where((lbt) => classAndCourseList.Any(s => s.ClassID == lbt.ClassID && s.CourseID == lbt.CourseID) && lbt.TaskType == 4) ```
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}