首页 新闻 会员 周边

linq to ef 查询优化问题

0
悬赏园豆:100 [待解决问题]

1.在联结多表的查询场景中,究竟是使用类似于左联结的from x in table……这种表达式语法好还是使用扩展方法GroupJoin比较好?听别人说使用GroupJoin()扩展方法会生成冗余的sql脚本,如果不喜欢from x in table这种写法,是否有办法可以对GroupJoin()扩展方法进行优化?

 

2.不使用多表联结查询。而是使用子查询,就像下面代码所示那样,是否会影响性能?或者产生冗余的sql脚本?

var query = db.T_JZX_MONEYSET.Where( e => e.I_ID_CUSTOMER == dec_customerId && e.I_BSTYPE == -1 ).Select( e => new GRID_BILLMONEY
{

    ID = -10000,
    I_ID_INOUT = e.I_ID_INOUT,
    NVC_NAME_INOUT = db.T_BASE_INOUTTYPE.Where( inout => inout.ID == e.I_ID_INOUT ).Select( inout => inout.NVC_NAME ).Min( ),
    I_ID_CUSTOMER = e.I_ID_CUSTOMER,
    I_ID_INOUTTYPE = e.I_TYPE,
    NVC_NAME_CUSTOMER =
                                                    e.I_TYPE == 1 ?
                                                    db.T_KH_CUSTOM.Where( customer => customer.ID == e.I_ID_CUSTOMER ).Select( customer => customer.NVC_NAME ).FirstOrDefault( )
                                                    :
                                                    db.T_KH_SUPPLY.Where( supply => supply.ID == e.I_ID_CUSTOMER ).Select( customer => customer.NVC_NAME ).FirstOrDefault( ),
    I_ID_MONEY = rmb,
    NVC_NAME_MONEY = "人民币",
    I_ID_TAX = 0,
    NVC_NAME_TAX = "",
    N_RATE = 1.00m,
    N_MONEY = e.N_MONEY,
    N_TAXRATE = 0,
    N_SHMONEY = 0,
    DT_DATE = e.DT_WRITE,
    I_BL = 0,
    I_STATE = e.I_STATE,
    NVC_REMARK = e.NVC_REMARK
} );
寒食的主页 寒食 | 初学一级 | 园豆:98
提问于:2018-06-09 22:57
< >
分享
所有回答(3)
1

有冗余的sql也不一定慢,最终都是要看生成的sql语句的在sql引擎中的执行计划

jello chen | 园豆:7306 (大侠五级) | 2018-06-10 00:08
0

使用表达式语法和扩展方法,没啥大的区别,尤其和你说的性能没有关系。你喜欢哪种就用哪种。

 

多表联结查询和子查询,哪个性能更优?很难说,取决运行时实际的执行计划。

 

表里的数据超过10万行之前,你担心的问题基本不存在。

西漠以西 | 园豆:1675 (小虾三级) | 2018-06-11 09:51
0

w我认为你这样去问能得到答案的几率很小,不如你自己用工具去获取两种写法的sql,然后去执行看看两种方法所需要的时间

猝不及防 | 园豆:2781 (老鸟四级) | 2018-06-11 14:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册