我的模型结构如下:
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
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(如果有)。