情不知从何起,一往而情深
排名
6
文章
199
粉丝
4
评论
3
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

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

2080人阅读 2024/3/29 9:58 总访问:1110221 评论:0 收藏:0 手机
分类: sqlsugar

sqlsugar in多字段

版本>=5.1.4.67-preview04

  1. List<OrderItem> list=xxx;
  2. db.Queryable<OrderItem>().Where(it => list.Any(s => s.Id == it.Id && s.Name == it.Name))
  3. //也可以用动态表达式拼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,这种在内存中处理的其实很好理解

  1. haveClassAndCourseList = classAndCourseList.Where(a => haveLabTaskResults.Any(i => i.ClassID == a.ClassID && i.CourseId == a.CourseID)).ToList();

多对多查询方式

多对多查询方式其实就应该是用in多字段的方式才对。比如班级与课程是多对多的,班级和课程提交了很多作业,需要查询出来这些班级和课程提交的作业,不能直接and这种组合对了,应该是一条就是一个and,每条之间用or连接才对。

比如这种先取出来班级与课程集合在去用and连接是不对的

  1. // 班级与课程的集合
  2. var classAndCourseList = classAndCourse.ToList();
  3. // 拿到里边涉及到的课程和班级
  4. List<string> haveCourseIDList = classAndCourseList.Select(a => a.CourseID).Distinct().ToList();
  5. List<string> classIdList = classAndCourseList.Select(a => a.ClassID).Distinct().ToList();
  6. // 找到这些班级和课程提交的作业
  7. var labTaskResults = Db.Queryable<LabTaskResult>().Where((lbt) => classIdList.Contains(lbt.ClassID) && haveCourseIDList.Contains(lbt.CourseID) && lbt.TaskType == 4).ToList();

这种是不对的,这种组合可能会多出来数据,数据可能会比实际的多,只多不少,

正确的写法应该是一条就是一个and,每条之间用or连接
不需要先取出来班级和课程的集合,直接用sqlsugar哪个语法去in哪个班级和课程集合即可

  1. // 班级与课程的集合
  2. var classAndCourseList = classAndCourse.ToList();
  3. labTaskResults = Db.Queryable<LabTaskResult>().Where((lbt) => classAndCourseList.Any(s => s.ClassID == lbt.ClassID && s.CourseID == lbt.CourseID) && lbt.TaskType == 4)

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

评价

EF多字段排序

先根据状态排序,再根据时间排序//先根据状态排序,再根据时间排序 XX.OrderBy(ord=&gt;ord.State) .ThenByDescending(or...

Elasticsearch 多字段特性及Mapping中配置自定义Analyzer

Elasticsearch 多字段特性及Mapping中配置自定义Analyzer[TOC] 多字段类型多字段特性 厂家名字可以实现精确匹配,增加一...

vue3 ts 方法传参any使用。vue3 ts reactive 使用类型,定义具体类型。vue3 ts实现分组 多字段作为key分组,二级分组,多级分组,子级分组

[TOC]vue3 ts 方法传参,any使用方法1: // 循环解析 dataListToAppend.forEach((element: any) =&gt; { state.tasks...