回到目录

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

 var linq = from student in base.GetModel()
join user_classrooms in new TsingDa_NewLearningBarRepository<User_Classroom_R>(base.UnitWork).GetModel()
on student.UserInfoID equals user_classrooms.UserInfoID
join classroom_Info in new TsingDa_NewLearningBarRepository<Classroom_Info>(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<Classroom_Plan>(base.UnitWork).GetModel()
on user_classrooms.ClassroomInfoID equals classroom_Plan.ClassroomInfoID into list
join classroom_CommonValue_R in new TsingDa_NewLearningBarRepository<Classroom_CommonValue_R>(base.UnitWork).GetModel()
on user_classrooms.ClassroomInfoID equals classroom_CommonValue_R.ClassroomInfoID into valueList
join user_ClassroomPlan_Study in new TsingDa_NewLearningBarRepository<User_ClassroomPlan_Study>(base.UnitWork).GetModel()
.Where(i => i.ClassroomPlanID == && 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() == ? (int)StudyStatus.Study : (int)StudyStatus.Finish
let scale = (list.Count() == ) ? : userplane.Count() - / 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<Classroom_CommonValue_R>)valueList //这里这前是valueList.ToList()
};

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

    var result = linq.AsQueryable<Classroom_Info>().Where(spec.SatisfiedBy()).OrderBy(i => i.ClassroomInfoID);
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. JSP/Servlet相关

    1 简介 JSP(Java Server Page)和Servlet是JavaEE规范的两个基本成员,是JavaWeb开发的重点. JSP的本质是Servlet,当用户向指定的Servlet发送请求时 ...

  2. win10 上运行 curl_init() 函数一直报错的解决办法

    [问题现象] 1.把 APACHE 的 ZIP 包解压到目录,比如 d:\apache24\ 2.把 PHP 的 ZIP 包解压到目录,比如:d:\php56\ apache 与 php 与 MySQ ...

  3. 为Page添加INotifyPropertyChanged功能

    在Page页面里面, DataContext 更新后,前台数据要求会自动更新. 但前台的绑定如果用x:bind 语法. 它要求强类型.直接关联到DataContext上就不行了. 需要为Page 添加 ...

  4. html form 提交表单的一些问题

    1. 如果在一个form里有summit按钮,则只能提交本form的内容

  5. PYTHON学习之路_PYTHON基础(2)

    学习内容: 1.Python数据类型与变量 2.Python字符串 3.Python列表 4.Python while循环 5.Python字典 6.Python实例 一.Python数据类型与变量 ...

  6. testng参数化(提供测试数据)【转】

    testng提供测试数据的两个注释:@DataProvide和@Parameter   一.通过testng.xml中设置参数 (实际上testng.xml只是一个名字,可以起任何一个名字,只要是.x ...

  7. XtraBackup备份笔记

    安装 rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm yum in ...

  8. 黑马程序员——HTML表格布局

    ---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net ...

  9. JavaScript调试工具

    最常用的最有效的有三个: 1. FireFox浏览器的Firebug,我用得不多 2. IE 8浏览器的Microsoft Script Editor.当运行网页的脚本出错时,会报错,如下所示: 单击 ...

  10. [MySQL][Spider][VP]Spider-3.1 VP-1.0 发布

    我很高兴的宣布 Spider 存储引擎 3.1 Beta 版本和垂直分区存储引擎 1.0 Beta 版本发布了. Spider 是数据库拆分的存储引擎: http://spiderformysql.c ...