Asp.net core 如何以带有EF的实体的形式获取嵌套查询的结果

Asp.net core 如何以带有EF的实体的形式获取嵌套查询的结果,asp.net-core,entity-framework-core,Asp.net Core,Entity Framework Core,我的项目中有一些模型: **Model ServiceDeliveryDoc** 我用SQL编写了一些嵌套查询来获取ServiceDeliveryDoc LegalEntity,按ServiceRegistryId筛选: 如何使用Enity框架接收模拟结果?从您的SQL查询和模型设计来看,ServiceDeliveryDoc和LegalEntity之间存在一对一关系,ServiceDeliveryDoc和ServiceRegistry之间存在多对多关系。对于,您可以使用以下内容: var re

我的项目中有一些模型:

**Model ServiceDeliveryDoc**
我用SQL编写了一些嵌套查询来获取ServiceDeliveryDoc LegalEntity,按ServiceRegistryId筛选:


如何使用Enity框架接收模拟结果?

从您的SQL查询和模型设计来看,
ServiceDeliveryDoc
LegalEntity
之间存在一对一关系,
ServiceDeliveryDoc
ServiceRegistry
之间存在多对多关系。对于,您可以使用以下内容:

var result = _context.ServiceDeliveryDoc
            .Include(sd => sd.LegalEntity)
            .Where(sd =>
                _context.ServiceRegistryToServiceDeliveryDoc
                    .Where(srt => srt.ServiceRegistryId == "101")
                    .Select(srt => srt.ServiceDeliveryDocId)
                    .Contains(sd.Id)
            )
            .Select(sd => new
            {
                sd.Id,sd.PartnerDocId , sd.Date,sd.Cost,sd.LegalEntityId, sd.LegalEntity.Name
            }).ToList();
DbContext

protected override void OnModelCreating(ModelBuilder modelBuilder)
{       
        modelBuilder.Entity<ServiceRegistryToServiceDeliveryDoc>()
            .HasOne(sr => sr.ServiceDeliveryDoc)
            .WithMany(sd => sd.ServiceRegistryToServiceDeliveryDoc)
            .HasForeignKey(sr => sr.ServiceDeliveryDocId);

        modelBuilder.Entity<ServiceRegistryToServiceDeliveryDoc>()
           .HasOne(sr => sr.ServiceRegistry)
           .WithMany(sd => sd.ServiceRegistryToServiceDeliveryDoc)
           .HasForeignKey(sr => sr.ServiceRegistryId);

}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{       
modelBuilder.Entity()
.HasOne(sr=>sr.ServiceDeliveryDoc)
.WithMany(sd=>sd.ServiceRegistryToServiceDeliveryDoc)
.HasForeignKey(sr=>sr.ServiceDeliveryDocId);
modelBuilder.Entity()
.HasOne(sr=>sr.ServiceRegistry)
.WithMany(sd=>sd.ServiceRegistryToServiceDeliveryDoc)
.HasForeignKey(sr=>sr.ServiceRegistryId);
}
    public string Id { get; set; }
    public DateTimeOffset Date { get; set; }
    public decimal Cost { get; set; }

    [InverseProperty("ServiceRegistry")]
    public ICollection<ServiceRegistryToServiceDeliveryDoc> ServiceRegistryToServiceDeliveryDoc { get; set; }
**Model ServiceRegistryToServiceDeliveryDoc**
    public string Id { get; set; }
    public string ServiceRegistryId { get; set; }
    public string ServiceDeliveryDocId { get; set; }

    [ForeignKey("ServiceDeliveryDocId")]
    [InverseProperty("ServiceRegistryToServiceDeliveryDoc")]
    public ServiceDeliveryDoc ServiceDeliveryDoc { get; set; }
    [ForeignKey("ServiceRegistryId")]
    [InverseProperty("ServiceRegistryToServiceDeliveryDoc")]
    public ServiceRegistry ServiceRegistry { get; set; }
SELECT  ReturnsTable.[Id]
        ,ReturnsTable.[PartnerDocId]
        ,ReturnsTable.[Date]
        ,ReturnsTable.[Cost]
        ,ReturnsTable.[LegalEntityId]
        ,LegalEntityTable.[Name]
        ,ReturnsTable.[DocProcessId]
 FROM [Vishnya].[dbo].[ServiceDeliveryDoc] as ReturnsTable
 left join [Vishnya].[dbo].[LegalEntity] as LegalEntityTable
 on ReturnsTable.[LegalEntityId] = LegalEntityTable.[Id]
 where ReturnsTable.Id in ( select ServiceDeliveryDocId
                            from ServiceRegistry_To_ServiceDeliveryDoc
                            where ServiceRegistryId = @ServiceRegistryId)
var result = _context.ServiceDeliveryDoc
            .Include(sd => sd.LegalEntity)
            .Where(sd =>
                _context.ServiceRegistryToServiceDeliveryDoc
                    .Where(srt => srt.ServiceRegistryId == "101")
                    .Select(srt => srt.ServiceDeliveryDocId)
                    .Contains(sd.Id)
            )
            .Select(sd => new
            {
                sd.Id,sd.PartnerDocId , sd.Date,sd.Cost,sd.LegalEntityId, sd.LegalEntity.Name
            }).ToList();
protected override void OnModelCreating(ModelBuilder modelBuilder)
{       
        modelBuilder.Entity<ServiceRegistryToServiceDeliveryDoc>()
            .HasOne(sr => sr.ServiceDeliveryDoc)
            .WithMany(sd => sd.ServiceRegistryToServiceDeliveryDoc)
            .HasForeignKey(sr => sr.ServiceDeliveryDocId);

        modelBuilder.Entity<ServiceRegistryToServiceDeliveryDoc>()
           .HasOne(sr => sr.ServiceRegistry)
           .WithMany(sd => sd.ServiceRegistryToServiceDeliveryDoc)
           .HasForeignKey(sr => sr.ServiceRegistryId);

}