簡體   English   中英

LINQ的LEFT JOIN產生NULL引用異常

[英]LEFT JOIN with LINQ produces NULL reference exception

我正在嘗試將使用JOIN的當前代碼轉換為使用LINQ的LEFT JOIN。 這是當前代碼

 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); 

我嘗試根據如何使用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); 

我嘗試了SingleOrDefault和FirstOrDefault,並在運行時不斷獲取NULL對象引用。 該示例與我的案例之間的區別在於,我正在創建一個新的FuncViewModel對象,而不僅僅是新的。 如何解決該問題?

我用這段代碼解決了

  //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