选择里面的 Include in EF Core

tin*_*ker 4 entity-framework entity-framework-core asp.net-core

我有一个如下所示的实体(为简洁起见,部分删除,它包括许多其他属性):

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>();
}
Run Code Online (Sandbox Code Playgroud)

TenderCircles属性用于提供与另一个名为 的实体的多对多关系CircleTenderCircle实体看起来像这样:

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; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

但是,它根本行不通。我想要实现的是,我只想从中获取TenderId和属性,而忽略实际的和对象。知道如何在EF Core中实现这一点吗?CircleIdTenderCircleTenderCircle

Tan*_*jel 8

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

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();
Run Code Online (Sandbox Code Playgroud)

然后TenderViewModel如下:

public class TenderViewModel
{
   public int Id { get; set; }
   public AppUser Creator { get; set; }
   public List<TenderCircle> TenderCircles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)