中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

EF架構(gou)~為導航屬性賦值(zhi)時(shi)ToList()的替(ti)換方(fang)案

回到目錄

今天在(zai)(zai)進行EF開發時(shi),遇(yu)到(dao)一個(ge)問(wen)題,在(zai)(zai)進行join查(cha)詢時(shi),類中(zhong)的(de)一個(ge)集合類型的(de)導航屬性(xing),在(zai)(zai)給它賦值時(shi),將查(cha)詢出來的(de)結果ToList()后,出錯了,linq to entity不支持這種操作,而在(zai)(zai)linq to sql里(li)這是(shi)合法的(de),在(zai)(zai)EF中(zhong)是(shi)不行的(de),所(suo)以,使用了替換方法,就是(shi)類型強轉,代碼如下:

 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 == 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<Classroom_CommonValue_R>)valueList //這里這前是valueList.ToList()
};

而在分(fen)頁返回時,也使用(yong)了類型(xing)轉換,這種轉換是(shi)內存中(zhong)自動完(wan)成,所以性能方(fang)面不用(yong)考(kao)慮

    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有很(hen)多(duo)不便的地方,如(ru)在(zai)使用(yong)(yong)skip之前(qian),必須(xu)要對iqueryable進行ordery操作;在(zai)實體賦值時不能(neng)使用(yong)(yong)邏輯判(pan)斷等等

回到目錄

posted @ 2013-10-18 14:53  張占嶺  閱讀(4422)  評論(2)    收藏  舉報