如何基于另一表的值从数据库表获取数据(SQL、ADO.NET)
优化关联表数据查询的方式
你当前的代码分三次查询数据库,每次都会产生一次数据库往返请求,在数据量较大或请求频繁时会影响性能。可以通过Linq关联查询一次性完成数据获取,减少数据库交互次数,同时让代码更简洁。
方式一:利用实体框架导航属性(推荐)
如果你的EF模型已经配置了表间的关联导航属性(比如Employee包含Position属性,Position包含AvailableModuls集合),可以直接通过导航属性链式查询:
var availableModules = db.Employees .Where(e => e.FIO == FIO) .SelectMany(e => e.Position?.AvailableModuls ?? Enumerable.Empty<AvailableModul>()) .Select(m => m.Available_Modul) .ToList(); return availableModules;
方式二:显式Join查询
如果模型没有配置导航属性,可以用显式Join关联三张表:
var availableModules = (from employee in db.Employees join position in db.Positions on employee.Position_Id equals position.Id join module in db.AvailableModuls on position.Access_Code equals module.Access_Code where employee.FIO == FIO select module.Available_Modul).ToList(); return availableModules;
额外优化点
- 避免直接使用
First():如果不存在匹配的FIO,First()会抛出异常,建议根据业务场景改用FirstOrDefault(),并添加空值判断逻辑。 - 按需选择数据:只查询需要的
Available_Modul字段,减少不必要的数据传输量。
内容的提问来源于stack exchange,提问作者Andrew Production
相关产品推荐
相关产品推荐

