按许多相关记录列中的最后一个排序

问题描述 投票:0回答:1

我的模型结构如下:

public class Company
{ 
  public long Id {get; set;}
  // anower fields
  public List<OrganisationRegData> RegData { get; set; }
}

public class OrganisationRegData
{
    public long Id {get; set;}

    [MaxLength(250)]
    public string FullName { get; set; }

    [MaxLength(250)]
    public string ShortName { get; set; }
    
    // anower fields
    
    public Company Company { get; set; }
 }

因此,我需要获取按最后一个相关的 OrganizationRegDatas ShortName 字段排序的公司列表。 在纯sql中,查询看起来像。但是如何通过 EF、LINQ 等实现同样的功能。

select * from Companies c left join OrganisationRegData ord on c.ID = ord.CompanyID
order by ord.ShortName
c# entity-framework linq .net-core
1个回答
0
投票
   var companiesOrderedByShortName = context.Companies
        .Include(c => c.RegData)
        .OrderByDescending(c => c.RegData.Max(rd => rd.ShortName))
        .ToList();

说明:

我们使用 Include(c => c.RegData) 来急切地加载相关的 OrganizationRegData。

OrderByDescending 根据每个公司的相关 OrganizationRegData 中的最大 ShortName 值对公司进行排序。

LastOrDefault() 检索每个公司的最后一个 OrganizationRegData(如果有)。

© www.soinside.com 2019 - 2024. All rights reserved.