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

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

我有一个这样的模型结构:

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
2个回答
1
投票

你原来的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;

0
投票
var companiesOrderedByShortName = context.Companies
    .OrderBy(c => c.RegData.OrderBy(rd => rd.Id).LastOrDefault().ShortName)
.ToList();

在此更新的查询中:

我们使用 LastOrDefault 来获取最后一次出现的 RegData。

现在,您的公司列表将根据最后一次出现的情况按其 Regadata 简称进行排序。

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