【问题标题】:Select inside Include in EF Core在包含在 EF Core 中选择
【发布时间】:2018-08-26 19:10:02
【问题描述】:

我有一个看起来像这样的实体(为简洁起见,部分删除,它包含许多其他属性):

public class Tender
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public string CreatorId { get; set; }
    [ForeignKey("CreatorId")]
    public virtual AppUser Creator { get; set; }
    public ICollection<TenderCircle> TenderCircles { get; set; } = new List<TenderCircle>();
}

TenderCircles 属性用于提供与另一个名为 Circle 的实体的多对多关系。 TenderCircle 实体如下所示:

public class TenderCircle
{
    public int TenderId { get; set; }
    [ForeignKey("TenderId")]
    public Tender Tender { get; set; }
    public int CircleId { get; set; }
    [ForeignKey("CircleId")]
    public Circle Circle { get; set; }
}

现在,我正在执行以下查询(为简洁起见,部分删除,通常它包括许多其他 IncludeThenInclude 语句):

return _context.Tenders
               .Include(t => t.Creator)
               .Include(t => t.TenderCircles.Select(tc => new { CirlceId = tc.CircleId, TenderId = tc.TenderId }))
               .ToList();

但是,它根本不起作用。我想要实现的是我只想从TenderCircle 中获取TenderIdCircleId 属性,而忽略实际的TenderCircle 对象。知道如何在 EF Core 中实现这一点吗?

【问题讨论】:

  • 您的项目的 .NET Core 版本是什么?

标签: entity-framework asp.net-core entity-framework-core


【解决方案1】:

按如下方式编写您的查询:

return _context.Tenders.Select(t => new TenderViewModel
                       {
                          Id = t.Id,
                          Creator = t.Creator,
                          TenderCircles = t.TenderCircles.Select(tc => new TenderCircle { CirlceId =  tc.CircleId, TenderId = tc.TenderId }).ToList();
                       }).ToList();

然后TenderViewModel如下:

public class TenderViewModel
{
   public int Id { get; set; }
   public AppUser Creator { get; set; }
   public List<TenderCircle> TenderCircles { get; set; }
}

【讨论】:

  • 这在我的情况下会变得相当麻烦,因为正如我在上面所写的,还有许多其他 IncludeThenInclude 语句涉及
  • @tinker 这个解决方案可能正是您所需要的。因为当您编写不需要包含的选择时,您正在告诉从数据库中获取什么。请注意,在执行 .ToList() 之前先进行选择
  • 所以你需要选择必填字段就是了
猜你喜欢
  • 2021-10-28
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 2021-07-12
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多