You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于另一表的值从数据库表获取数据(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:16:00