c# - 实体框架 - 选定条目上的嵌套选择查询
问题描述
我正在使用Entity Framework Core 3.1.4。我的模型就像-
public class Review
{
[Key, Required]
public Guid Id { get; set; }
public int Rating { get; set; }
public DateTime WatchDate { get; set; }
public virtual Guid UserId { get; set; }
public virtual User User { get; set; }
}
我的控制器是这样的-
public async Task<IActionResult> Index()
{
var data = await _context.Reviews
.Include(r=>r.User)
.Select(r => new Review {
Id = r.Id,
WatchDate = r.WatchDate,
User = r.User,
Rating = r.Rating
})
.OrderByDescending(r => r.Rating)
.ToListAsync();
return View(data);
}
它做得很好,但它正在User
像这样查询表的所有数据(红色标记区域) -
但我只需要email
,所以我喜欢从那里只选择电子邮件(黄色标记的一个)。我Select
在上层做,但不能在内部元素做同样的事情。据我所知,Entity Framework中有这样的方法。但是随着版本的变化,代码不起作用。
谁能帮忙,我该如何完成?
如何在列表中仅包含用户电子邮件,而不是所有数据?那么如何选择嵌套条目呢?
解决方案
接下来试试:
var data = await _context.Reviews
.OrderByDescending(r => r.Rating)
.Select(r => new Review {
Id = r.Id,
WatchDate = r.WatchDate,
User = new User { Email = r.User.Email},
Rating = r.Rating
})
.ToListAsync();
但我想说更好的设计是创建特定DTO
的,它只包含需要的属性并将其填充到Select
子句中。
由于您有子句,.Include(r=>r.User)
因此也不需要调用。Select
推荐阅读
- postgresql - MSSQL 到 POSTGRES 的转换
- tfs - 如何处理 TFS scrum 模板中的风险
- javascript - 在角度中使用 debounceTime
- odata - 在获取实体操作中使用筛选查询的逻辑应用
- windows - Docker 构建失败并出现错误:无法注册层:重新执行错误:退出状态 1
- angular - 多租户和 AWS Amplify、AppSync、Cognito
- bash - bash: /home/user/.bash_completion/alacritty: 没有这样的文件或目录
- python-3.x - Python。按日期过滤数组的最佳方法
- python - 从 S3 存储桶读取熊猫数据的最快选择?
- pytorch - 与 Pytorch 中从列表到张量的转换相关的错误