如何将company_ID参数传入LINQ查询替换硬编码值
解决方案
直接把硬编码的1替换为方法参数company_ID即可,注意处理左连接后的空值情况(比如Fzone的左连接结果i可能为null,需要先判断null再比较CompanyId)。
修改后的完整代码:
public Task<List<RsvItemsViewModel>> GetReservations(int company_ID) { try { return ((from a in gTravelDbContext.Set<Frsvitem>() join d in gTravelDbContext.Set<Freserv>() on a.Rsinum equals d.Rsvnum into gd from d in gd.Where(p1 => p1.CompanyId == company_ID) join c in gTravelDbContext.Set<Fsupplier>() on a.SupplId equals c.SupplId into gc from c in gc.Where(p1 => p1.CompanyId == company_ID) join i in gTravelDbContext.Set<Fzone>() on a.Rsizone equals i.Zoneid into gi from i in gi.DefaultIfEmpty() where i == null || i.CompanyId == company_ID join g in gTravelDbContext.Set<Fservtype>() on a.Rsisertype equals g.Stypecode join b in gTravelDbContext.Set<Fcustomer>() on d.CustId equals b.CustId join e in gTravelDbContext.Set<Fpaykind>() on d.Rsvpaymethod equals e.Payid into ge from e in ge.DefaultIfEmpty() join f in gTravelDbContext.Set<Fsalesman>() on d.Rsvsalescode equals f.Salescode into gf from f in gf.DefaultIfEmpty() join h in gTravelDbContext.Set<Fpinake>() on d.Rsvakirosi equals h.Tblid into gh from h in gh.Where(p => p.Tblcd == "yesno") select new RsvItemsViewModel { Rsinum = a.Rsinum, Stypename = g.Stypename, Cuname = b.Cuname, Rsvcuname = d.Rsvcuname, Sumame = c.Suname, Rsvakirosi = d.Rsvakirosi, Yesno = h.Tbltext, Paytext = e.Paytext, Salesname = f.Salesname, Stypegroup = g.Stypegroup, Company_id = d.CompanyId.GetValueOrDefault(), Zonename = i?.Zonename, // 加空安全访问避免i为null时报错 Rsisertype = a.Rsisertype, Suppl_id = a.SupplId, Xrhsh = d.Xrhsh, Bpar_id = a.BparId } ).ToListAsync()); } catch (Exception) { throw; } }
修改点说明:
- 将所有
Where子句中硬编码的1替换为方法传入的company_ID参数 - 针对
Fzone的左连接(DefaultIfEmpty()),修改where条件为i == null || i.CompanyId == company_ID,防止i为null时触发空引用异常 - 额外优化:
Zonename = i.Zonename改为Zonename = i?.Zonename,避免空引用问题
内容的提问来源于stack exchange,提问作者Nick Lazidis
相关产品推荐
相关产品推荐

