首页 > 解决方案 > 如果需要查找父 ID,如何在单个查询中获取所有子记录?

问题描述

我有一个具有父子关系的模型。YearWeek

Years: YearID, Name
Weeks: WeekID, YearID, Name

因此,如果我有YearSelected,要获得一年中的所有周数,我会这样做:

List<Week> weeks = db.weeks.Where(w => w.YearID == model.YearSelected).ToList();
model.WeekList = new SelectList(weeks, "WeekID", "Name");

但是在数据库中我只保存WeekID所以只有model.WeekSelected

所以我如何得到同一年的所有星期model.WeekSelected

我可以先进行查询以获取 YearID,但想知道是否可以在一行中完成。

int YearID = db.weeks.Where(w => w.WeekID == model.WeekSelected)
                     .SingleOrDefault().YearID.Value;

标签: c#entity-frameworklinq

解决方案


您将需要使用子查询来获取YearID

List<Week> weeks = db.weeks
    .Where(w => w.YearID == db.weeks.First(w => w.WeekID == model.WeekSelected).YearID)
    .ToList();

WeekSelected当您知道只匹配一行时,这会产生更简单的 SQL,但不确定它是否会产生性能差异:

List<Week> weeks = db.weeks
    .Where(w => w.YearID == db.weeks.Single(w => w.WeekID == model.WeekSelected).YearID)
    .ToList();

推荐阅读