我有一个这样的模型结构:
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
你原来的SQL是无效的,它会产生重复。
在 LINQ 中,您的查询应如下所示:
var query =
from c in context.Companies
from rd in c.RegData
.OrderByDescending(rd => rd.Id)
.Take(1)
.DefaultIfEmpty()
orderby rd.ShortName
select c;
var companiesOrderedByShortName = context.Companies
.OrderBy(c => c.RegData.OrderBy(rd => rd.Id).LastOrDefault().ShortName)
.ToList();
在此更新的查询中:
我们使用 LastOrDefault 来获取最后一次出现的 RegData。
现在,您的公司列表将根据最后一次出现的情况按其 Regadata 简称进行排序。