.NET EF Core 按子集合属性排序

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

我有一个具有导航属性 PatientGroupMemberships 的患者类,PatientGroupMembership 具有 PatientGroup 属性,PatientGroup 具有属性 Name。 我想按患者的第一个 PatientGroupMembership -> PatientGroup -> Name 属性排序(按名称排序)

public class Patient
{
  public List<PatientGroupMembership>? PatientGroupMemberships { get; set; }
}

public class PatientGroupMembership
{
  public PatientGroup? PatientGroup { get; set; }
}

public class PatientGroup
{
  public string? Name { get; set; }
}

问题的第一部分已解决,我按 PatientGroup Name 属性加载并排序 PatientGroupMemberships

var query = patients
                    .Include(x => x.PatientGroupMemberships!.OrderBy(pgm => pgm.PatientGroup!.Name))
                    .ThenInclude(p => p.PatientGroup)
                    .AsNoTracking();

当我尝试按第一个名称值排序时,由于某种原因,它无法正确排序结果

 private static IQueryable<Patient> SortByPatientGroups(IQueryable<Patient> query, bool isDescendingOrder)
    {
        var orderedQuery = isDescendingOrder
            ? query.OrderByDescending(x => x.PatientGroupMemberships
                .Select(pgm => pgm.PatientGroup.Name)
                .FirstOrDefault())
            : query.OrderBy(x => x.PatientGroupMemberships
                .Select(pgm => pgm.PatientGroup.Name)
                .FirstOrDefault());

        return orderedQuery;
    }

任何帮助将不胜感激!

c# postgresql .net-core entity-framework-core ef-code-first
1个回答
0
投票

你已经很接近了,但我认为你需要将

Select
移到
OrderBy
内。这尚未经过测试,但我认为如果您将(在本例中为第二子条款)更改为...

query.OrderBy(x => x.PatientGroupMemberships
                .OrderBy(pgm => pgm.PatientGroup.Name)
                .FirstOrDefault().Name);

...应该可以。

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