博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EF架构~为导航属性赋值时ToList()的替换方案
阅读量:6887 次
发布时间:2019-06-27

本文共 3162 字,大约阅读时间需要 10 分钟。

今天在进行EF开发时,遇到一个问题,在进行join查询时,类中的一个集合类型的导航属性,在给它赋值时,将查询出来的结果ToList()后,出错了,linq to entity不支持这种操作,而在linq to sql里这是合法的,在EF中是不行的,所以,使用了替换方法,就是类型强转,代码如下:

var linq = from student in base.GetModel()                       join user_classrooms in new TsingDa_NewLearningBarRepository
(base.UnitWork).GetModel() on student.UserInfoID equals user_classrooms.UserInfoID join classroom_Info in new TsingDa_NewLearningBarRepository
(base.UnitWork).GetModel() on user_classrooms.ClassroomInfoID equals classroom_Info.ClassroomInfoID join teacher in base.GetModel() on classroom_Info.UserInfoID equals teacher.UserInfoID join classroom_Plan in new TsingDa_NewLearningBarRepository
(base.UnitWork).GetModel() on user_classrooms.ClassroomInfoID equals classroom_Plan.ClassroomInfoID into list join classroom_CommonValue_R in new TsingDa_NewLearningBarRepository
(base.UnitWork).GetModel() on user_classrooms.ClassroomInfoID equals classroom_CommonValue_R.ClassroomInfoID into valueList join user_ClassroomPlan_Study in new TsingDa_NewLearningBarRepository
(base.UnitWork).GetModel() .Where(i => i.ClassroomPlanID == 0 && i.StudyStatus == (int)StudyStatus.Study) on new user_classroom { UserInfoID = student.UserInfoID, ClassroomInfoID = user_classrooms.ClassroomInfoID } equals new user_classroom { UserInfoID = user_ClassroomPlan_Study.UserInfoID, ClassroomInfoID = user_ClassroomPlan_Study.ClassroomInfoID } into userplane let status = userplane.Count() == 0 ? (int)StudyStatus.Study : (int)StudyStatus.Finish let scale = (list.Count() == 0) ? 0 : userplane.Count() - 1 / list.Count() select new Classroom_Info_Ext { ClassroomInfoID = classroom_Info.ClassroomInfoID, Title = classroom_Info.Title, Type = classroom_Info.Type, EndTime = user_classrooms.EndTime, Student_Info = student, Teacher_Info = teacher, StudyScale = scale, StudyStatus = (StudyStatus)status, Classroom_CommonValue_R = (List
)valueList //这里这前是valueList.ToList() };

而在分页返回时,也使用了类型转换,这种转换是内存中自动完成,所以性能方面不用考虑

var result = linq.AsQueryable
().Where(spec.SatisfiedBy()).OrderBy(i => i.ClassroomInfoID); return new PagedList
(result, pp.PageIndex, pp.PageSize);

对于linq to entity有很多不便的地方,如在使用skip之前,必须要对iqueryable进行ordery操作;在实体赋值时不能使用逻辑判断等等

本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
机器学习算法实现解析——word2vec源代码解析
查看>>
『TensorFlow』命令行参数解析
查看>>
PHP中使用ActiveMQ实现消息队列
查看>>
Android源码解析系列
查看>>
ffpanel --ffmpeg的GUI,让ffmpeg离开黑黑的命令行
查看>>
jdk1.8源码包下载并导入到开发环境下助推高质量代码(Eclipse、MyEclipse和Scala IDEA for Eclipse皆适用)(图文详解)...
查看>>
PyMongo基本使用
查看>>
U盘安装win10
查看>>
mysql 两列互转
查看>>
玩转linux-xargs命令详解【转】
查看>>
项目笔记:前后台传值的几种方法
查看>>
Android使用charles抓包
查看>>
[C#]关于DBNULL的解释
查看>>
leetcode693:Binary Number with Alternating Bits
查看>>
MongoDB集群搭建教程收集(待实践)
查看>>
windows系统下Python环境的搭建
查看>>
使用路由延迟加载 Angular 模块
查看>>
72. js EXTJS grid renderer用法
查看>>
Java集合迭代器 Iterator分析
查看>>
mvc area出现“找到多个与名为“Home”的控制器匹配的类型”错误的解决方法
查看>>