简体   繁体   English

在“包含在EF Core中”中选择

[英]Select inside Include in EF Core

I have an entity that looks like this (partially removed for brevity, it includes many other properties): 我有一个看起来像这样的实体(为简洁起见部分删除,它包含许多其他属性):

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>();
}

The TenderCircles property is used to provide a many-to-many relationship with another entity called Circle . TenderCircles属性用于与另一个名为Circle实体提供多对多关系。 TenderCircle entity looks like this: 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; }
}

Now, I'm doing the following query (partially removed for brevity, normally it includes many other Include and ThenInclude statements): 现在,我正在执行以下查询(为简便起见,部分删除了该查询,通常它包含许多其他的IncludeThenInclude语句):

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

But, it simply doesn't work. 但是,它根本不起作用。 What I want to achieve is that I only want to get the TenderId and CircleId properties from TenderCircle and ignore the actual Tender and Circle objects. 我要实现的是,我只想从TenderCircle获取TenderIdCircleId属性,而忽略实际的TenderCircle对象。 Any idea how to achieve this in EF Core ? 知道如何在EF Core中实现这一目标吗?

Write your query as follows: 编写查询,如下所示:

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();

Then TenderViewModel as follows: 然后TenderViewModel如下:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM