在父子关系模型中,已知选中WeekID,如何单查询获取同年度所有周记录?
解决方案:单查询获取选中周同年度的所有周
嗨,我来帮你搞定这个单查询的需求!你完全不用先单独查YearID,直接通过一次Linq查询就能实现,下面给你两种实用的写法:
方法一:使用子查询
这种思路是先通过选中的WeekID定位到对应的YearID,再筛选出该年度的所有周,整个逻辑在一次数据库查询里完成:
// 一次性获取同年度所有周数据 var sameYearWeeks = db.Weeks .Where(w => w.YearID == db.Weeks .Where(selected => selected.WeekID == model.WeekSelected) .Select(selected => selected.YearID) .FirstOrDefault()) .ToList(); // 转换成SelectList用于页面绑定 model.WeekList = new SelectList(sameYearWeeks, "WeekID", "Name");
方法二:使用自连接
把Weeks表和自身做关联,通过YearID匹配选中周所在的年度,同样是单次数据库查询:
var sameYearWeeks = from week in db.Weeks join selectedWeek in db.Weeks on week.YearID equals selectedWeek.YearID where selectedWeek.WeekID == model.WeekSelected select week; model.WeekList = new SelectList(sameYearWeeks.ToList(), "WeekID", "Name");
小提醒
- 两种写法最终都会生成单次SQL查询,不会多次访问数据库,完全满足你的需求。
- 如果业务场景中存在
model.WeekSelected无效(比如没有对应Week记录)的情况,可以在查询后加个空值判断,避免后续绑定出问题。
内容的提问来源于stack exchange,提问作者Juan Carlos Oropeza
相关产品推荐
相关产品推荐

