首页 > 解决方案 > 实体框架 - 选定条目上的嵌套选择查询

问题描述

我正在使用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中有这样的方法。但是随着版本的变化,代码不起作用。

谁能帮忙,我该如何完成?

如何在列表中仅包含用户电子邮件,而不是所有数据?那么如何选择嵌套条目呢?

标签: c#asp.netentity-frameworkasp.net-coreentity-framework-core

解决方案


接下来试试:

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


推荐阅读