首页新闻找找看学习计划

linq多表查询导致页面超时打不开,请大神看下如何改善

0
悬赏园豆:30 [待解决问题]
from pro in _context.TB_Project.Where(p => p.haschildren != true && p.state == (int)ProjuctState.项目开启)
                       join area in _context.TB_ProjectArea on pro.area equals area.id
                       join quality in _context.TB_Projectqualitycontrol on pro.id equals quality.projectid into qua
                       from quality in qua.DefaultIfEmpty()
                       select new KBObj
                       {
                           project = pro,
                           area = area,
                           quality = quality,
                           borrowList = _context.TB_Projectborrowmoneylog.Where(a => a.projectid == pro.id).ToList(),
                           budgetList = _context.TB_ProjectBudget.Where(b => b.projectid == pro.id).ToList(),
                           conuntryList = _context.TB_ProjectCountryInfo.Where(c => c.projectid == pro.id).Select(ct => new KBCountry()
                           {
                               country = ct,
                               missionList = _context.TB_ProjectMission.Select(m => new KBMissionObj
                               {
                                   mission = m,
                                   scheduList = _context.TB_ProjectScheduleInfo.Where(s => s.missionid == m.id).ToList()
                               }
                                   ).ToList()
                           }).ToList()

                       }).ToList();
范晶晶的主页 范晶晶 | 初学一级 | 园豆:112
提问于:2016-03-11 09:58
< >
分享
所有回答(3)
0

把那些里面的list都拿出来单独查.不要写这么复杂的linq

不要tolist,第一句不要where ,where放到后面不然不好看

吴瑞祥 | 园豆:28770 (高人七级) | 2016-03-11 10:01
-1

我看你这关联都是很简单的一对多,为啥不在模型中建立关联呢?那样还不用写这么复杂的linq

刘宏玺 | 园豆:14004 (专家六级) | 2016-03-11 10:06
0

到查询分析器中抓到这个查询看看实际sql语句,看下执行情况。

其次你中间两个tolist会出现循环中的查询,类似for... db.query这样的效果,这个最好能够避免(比如先把数据平面化,先join出来,而不是用这种层级结构,最后拉到代码中再进行筛选)。就算不能避免也应该延迟到使用时再tolist。

 

Daniel Cai | 园豆:10374 (专家六级) | 2016-03-11 11:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册