简体   繁体   English

LINQ的LEFT JOIN产生NULL引用异常

[英]LEFT JOIN with LINQ produces NULL reference exception

I am trying to convert current code using JOIN to the LEFT JOIN using LINQ. 我正在尝试将使用JOIN的当前代码转换为使用LINQ的LEFT JOIN。 This is the current code 这是当前代码

 globalFunctions = _rolesAdapter.GetSecurityRightsForRole(SysManagerConstants.GLOBAL_DEFAULTS_ROLE_NUMBER, "SecFunc"). Select(secRight => new FuncViewModel() { Descrip = secRight.SecFunc.Descrip, FuncCode = secRight.SecFunc.FuncCode, Grouping = secRight.SecFunc.Grouping, Progmodule = secRight.SecFunc.Progmodule, SubCat = secRight.SecFunc.SubCat, GrantPerm = secRight.GrantPerm }).OrderBy(x => x.Descrip); //Unassigned editSecRoleViewModel.UnassignedFunctions = editSecRoleViewModel.UnassignedFunctions.Join(globalFunctions, uf => uf.FuncCode, gf => gf.FuncCode, (uf, gf) => new FuncViewModel() { Descrip = uf.Descrip, FuncCode = uf.FuncCode, Grouping = uf.Grouping, Progmodule = uf.Progmodule, SubCat = uf.SubCat, GrantPerm = (byte)(gf.GrantPerm | uf.GrantPerm), DefaultGrantPerm = gf.GrantPerm }).OrderBy(x => x.Descrip); 

My attempt to convert into LEFT JOIN based on the How do you perform a left outer join using linq extension methods 我尝试根据如何使用linq扩展方法执行左外部联接转换为LEFT JOIN

 //Unassigned editSecRoleViewModel.UnassignedFunctions = editSecRoleViewModel.UnassignedFunctions.GroupJoin(globalFunctions, uf => uf.FuncCode, gf => gf.FuncCode, (uf, gf) => new FuncViewModel() { Descrip = uf.Descrip, FuncCode = uf.FuncCode, Grouping = uf.Grouping, Progmodule = uf.Progmodule, SubCat = uf.SubCat, GrantPerm = (byte)(((int?)gf.FirstOrDefault().GrantPerm??1) | uf.GrantPerm), DefaultGrantPerm = (byte) ((int?)gf.FirstOrDefault().GrantPerm ?? 1) }).OrderBy(x => x.Descrip); 

I tried SingleOrDefault and FirstOrDefault and I keep getting the NULL object reference in run-time. 我尝试了SingleOrDefault和FirstOrDefault,并在运行时不断获取NULL对象引用。 The difference between the sample and my case is that I'm creating a new FuncViewModel object instead of just new. 该示例与我的案例之间的区别在于,我正在创建一个新的FuncViewModel对象,而不仅仅是新的。 What should be done to correct the problem? 如何解决该问题?

I solved it with this code 我用这段代码解决了

  //Unassigned editSecRoleViewModel.UnassignedFunctions = editSecRoleViewModel.UnassignedFunctions.SelectMany( uf => globalFunctions.Where(gf => uf.FuncCode== gf.FuncCode).DefaultIfEmpty(), (uf, gf) => new FuncViewModel() { Descrip = uf.Descrip, FuncCode = uf.FuncCode, Grouping = uf.Grouping, Progmodule = uf.Progmodule, SubCat = uf.SubCat, GrantPerm = (byte)( ((gf==null)?1:gf.GrantPerm) | uf.GrantPerm) , DefaultGrantPerm = ((gf == null) ? (byte)1 : gf.GrantPerm) }).OrderBy(x => x.Descrip); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM