回到目录

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

  1. var linq = from student in base.GetModel()
  2. join user_classrooms in new TsingDa_NewLearningBarRepository<User_Classroom_R>(base.UnitWork).GetModel()
  3. on student.UserInfoID equals user_classrooms.UserInfoID
  4. join classroom_Info in new TsingDa_NewLearningBarRepository<Classroom_Info>(base.UnitWork).GetModel()
  5. on user_classrooms.ClassroomInfoID equals classroom_Info.ClassroomInfoID
  6. join teacher in base.GetModel()
  7. on classroom_Info.UserInfoID equals teacher.UserInfoID
  8. join classroom_Plan in new TsingDa_NewLearningBarRepository<Classroom_Plan>(base.UnitWork).GetModel()
  9. on user_classrooms.ClassroomInfoID equals classroom_Plan.ClassroomInfoID into list
  10. join classroom_CommonValue_R in new TsingDa_NewLearningBarRepository<Classroom_CommonValue_R>(base.UnitWork).GetModel()
  11. on user_classrooms.ClassroomInfoID equals classroom_CommonValue_R.ClassroomInfoID into valueList
  12. join user_ClassroomPlan_Study in new TsingDa_NewLearningBarRepository<User_ClassroomPlan_Study>(base.UnitWork).GetModel()
  13. .Where(i => i.ClassroomPlanID == && i.StudyStatus == (int)StudyStatus.Study)
  14.  
  15. on new user_classroom
  16. {
  17. UserInfoID = student.UserInfoID,
  18. ClassroomInfoID = user_classrooms.ClassroomInfoID
  19. } equals new user_classroom
  20. {
  21. UserInfoID = user_ClassroomPlan_Study.UserInfoID,
  22. ClassroomInfoID = user_ClassroomPlan_Study.ClassroomInfoID
  23. } into userplane
  24. let status = userplane.Count() == ? (int)StudyStatus.Study : (int)StudyStatus.Finish
  25. let scale = (list.Count() == ) ? : userplane.Count() - / list.Count()
  26. select new Classroom_Info_Ext
  27. {
  28. ClassroomInfoID = classroom_Info.ClassroomInfoID,
  29. Title = classroom_Info.Title,
  30. Type = classroom_Info.Type,
  31. EndTime = user_classrooms.EndTime,
  32. Student_Info = student,
  33. Teacher_Info = teacher,
  34. StudyScale = scale,
  35. StudyStatus = (StudyStatus)status,
  36. Classroom_CommonValue_R = (List<Classroom_CommonValue_R>)valueList //这里这前是valueList.ToList()
    };

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

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

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

回到目录

EF架构~为导航属性赋值时ToList()的替换方案的更多相关文章

  1. EF架构~过滤导航属性等,拼接SQL字符串

    拼接T-SQL串,并使它具有通用性 好处:与服务器建立一次连接,给服务器发一条SQL命令,即可实现 代码如下: 1 /// <summary> 2 /// 构建Insert语句串 3 // ...

  2. ASP.NET EF 延迟加载,导航属性延迟加载

    ASP.NET EF 延迟加载,导航属性延迟加载   EF(EntityFramework)原理:属于ORM的一种实现 通过edmx文件来查看三部分:概念模型,数据模型,映射关系,上下文DbConte ...

  3. EF Code First 导航属性 与外键(转载)

    EF Code First 导航属性 与外键 一对多关系 项目中最常用到的就是一对多关系了.Code First对一对多关系也有着很好的支持.很多情况下我们都不需要特意的去配置,Code First就 ...

  4. <jsp:param>标签给属性赋值时的一个坑

    http://blog.sina.cn/dpool/blog/s/blog_58c5066001011gdn.html 因为: <jsp:forward和<jsp:param在被编译成ja ...

  5. ASP.NET Core EF 查询获取导航属性值,使用Include封装

    // 引用 using Microsoft.EntityFrameworkCore; // 摘要: // Specifies related entities to include in the qu ...

  6. EF Core反向导航属性解决多对一关系

    多对一是一种很常见的关系,例如:一个班级有一个学生集合属性,同时,班级有班长.语文课代表.数学课代表等单个学生属性,如果定义2个实体类,班级SchoolClass和学生Student,那么,班级Sch ...

  7. EF Code First 导航属性 与外键

    一对多关系 项目中最常用到的就是一对多关系了.Code First对一对多关系也有着很好的支持.很多情况下我们都不需要特意的去配置,Code First就能通过一些引用属性.导航属性等检测到模型之间的 ...

  8. 给a标签herf属性赋值时,必须加http://

    新建一个web工程,FirstWeb,在其中新建一个页面:test.jsp <%@ page language="java" contentType="text/h ...

  9. 应该是实例化对象的没有对属性赋值时,自动赋值为null,但不是空指针对象引用

    此时会输出两个null. Users类的实例是myUsers,但是由于javabean的作用范围是page,所以前面页面传送的javabean的设置的属性全部不能接收到.所以对象myUsers属性为自 ...

随机推荐

  1. PHP对象转数组||PHP数组转对象

    function arrayToObject($e){     if( gettype($e)!='array' ) return;     foreach($e as $k=>$v){     ...

  2. React jQuery公用组件开发模式及实现

    目前较为流行的react确实有很多优点,例如虚拟dom,单向数据流状态机的思想.还有可复用组件化的思想等等.加上搭配jsx语法和es6,适应之后开发确实快捷很多,值得大家去一试.其实组件化的思想一直在 ...

  3. JS实现回到顶部效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. Clover 资源管理器 http://cn.ejie.me/

    附件列表 clover.jpg

  5. HDU5361 In Touch(线段树 + 最短路)

    传送门 恰逢才做过VFK的A+B Problem,发现这道题也可以那样搞.区间连边的时候,我们就可以给那个区间在线段树对应的标号上连边. 线段树也可以不建出来,直接当做一个标号的合集,不占用内存,只用 ...

  6. 基于VC的声音文件操作(四)

    (五)读取wav的实例 跟据WAVE文件的格式,实现了读取双声道立体声数据的例子如下: BYTE * GetData(Cstring *pString) //获取声音文件数据的函数,pString参数 ...

  7. install skype4.3 in ubuntu15.04

    Canonical Partners repository finally adds support for Ubuntu 15.04. Here’s how to enable the reposi ...

  8. *关于httl开源Java模板的使用心得

    1.简介 HTTL (Hyper-Text Template Language) 是一个高性能的开源JAVA模板引擎, 适用于动态HTML页面输出, 可替代JSP页面, 指令和Velocity相似. ...

  9. Ubuntu/Linux 下pdf阅读器Zathura(类vim操作)

    Ubuntu下源安装: sudo apt-get install zathura 操作总结: 基本操作与vim一致,对于熟悉vim快捷键的十分方便: 向下移动一页是J(Ctrl+f),向上移动一页是K ...

  10. (一)读取PCD文件

    下面是一个简单的读取PCD文件并显示的代码: #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/p ...