c# - 如果需要查找父 ID,如何在单个查询中获取所有子记录?
问题描述
我有一个具有父子关系的模型。Year
和Week
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;
解决方案
您将需要使用子查询来获取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();
推荐阅读
- elasticsearch - 为什么我的时间戳范围查询没有返回任何内容
- angular - Facebook 提要对话框错误:参数“href”应表示有效的 URL
- javascript - 某些特定数据未从服务器文件保存在数据库中
- python - 升级`pip`会删除其他python的点子
- c++ - 错误:AddressSanitizer:负大小参数:(大小=-1)
- javascript - 在 Typescript 中编写 sanitizer 函数来检查 null、未定义和空字符串并在函数内部出错
- sql - 如何处理 informatica 中的指数值
- git - 更改 git 合并分支冲突消息
- android - Android WebView - 来自未在 HTML 页面中加载的资产的自定义字体
- r - 根据组内先前的值创建新的计数变量