我有一个具有导航属性 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;
}
任何帮助将不胜感激!
你已经很接近了,但我认为你需要将
Select
移到 OrderBy
内。这尚未经过测试,但我认为如果您将(在本例中为第二子条款)更改为...
query.OrderBy(x => x.PatientGroupMemberships
.OrderBy(pgm => pgm.PatientGroup.Name)
.FirstOrDefault().Name);
...应该可以。