首页 新闻 会员 周边

MVC Entity FrameWork Linq left Join 效率问题

0
悬赏园豆:10 [已关闭问题] 关闭于 2013-11-14 20:42

最近做的一个项目,使用的环境是mvc 3,Entity FrameWork,用linq写的查询,

现在遇到这样的问题,两张表,一个左表一条数据,右表有30,000数据,现在进行左表左连接右表,访问时间如下:

innner join : 00:00:00.3831501

left join: 00:00:10.9163434

 

数据库用的是oracle 10g ,数据访问引擎为:Oracle.DataAccess.Client(官方访问类)

如果用:EFOracleProvider(第三方访问类)

 

linq 语句如下:

其中T_BASE_PERSON 一条数据,T_PLAN_PLAN 有30,000左右的数据;

            var query = (from person in container.T_BASE_PERSON
                         join plan in container.T_PLAN_PLAN
                            on new { PERSON_ID = person.PersonId, PERIOD_ID = period.ID, IS_MAIN = (bool?)person.IsMain } equals
                            new { plan.PERSON_ID, plan.PERIOD_ID, IS_MAIN = plan.IS_MAIN }
                            into auditList
                        from list in auditList.DefaultIfEmpty()
                        select new PersonPlanAuditListEntity()
                        {
                            PlanId = list == null ? 0 : list.ID,
                            PersonId = person.PersonId,
                            PersonName = person.PersonName,
                        });

在query.ToList();时耗时间了,不知道什么问题

如果是.ToList()的问题,那不使用.ToList();有么有其他解决方案?

哪位遇到过类似问题,请帮忙解决,谢谢:

海之澜的主页 海之澜 | 菜鸟二级 | 园豆:248
提问于:2013-04-29 22:20
< >
分享
所有回答(3)
0

这个跟ToList应该没有关系。ToList的时候才真正执行查询,所以时间肯定在这一步。

inner join和Left join属于两种不同的业务场合。本来就不是一样的。

你可以分析它产生的sql语句,看看是否有什么发现

陈希章 | 园豆:2538 (老鸟四级) | 2013-04-30 06:59

谢谢,现在得出结论了,Net4.0 Linq是有这个bug的,4.5版本已修复此bug

支持(0) 反对(0) 海之澜 | 园豆:248 (菜鸟二级) | 2013-06-01 19:28
0

最主要还是看生成的sql语句是什么样子的,只要生成的sql语句没有问题,那么时间长短就是数据库本身的问题了。

ocean | 园豆:824 (小虾三级) | 2013-11-04 22:58
0

楼主请教个问题, 我上次写的linq语句跟你的基本一样,但是生成的sql语句是inner join 
你上面的linq生成的也应该是 inner join 吧?
在连接条件很多的情况下,你是用什么办法生成Left Join 的 ?
求指点一下,谢谢

kezhiping | 园豆:197 (初学一级) | 2014-04-29 18:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册