首页 > 解决方案 > 使用 LINQ 在 ASP.Core 中排序的 ICollection 属性

问题描述

如何对 Icollection 属性进行排序。例如:

public  class INSTRUCTOR
{
    public int Id
    public string Name
    public PersonalDetails PersonalDetail
}

public class PersonalDetails
{
    public int Id;
    public string Firstname;
    public ICollection<Emails> Emails;
}

public class Emails
{
    public int Id;
    public string Email;
}

现在我有教练的列表页面,我得到了所有这样的教练:

var instructors = db.instructors.include(p=>p.personaldetails).Tolist();

我可以使用以下代码使用instructorName 进行排序:

instructors = instructors.OrderBy(i => i.PersonalDetail.Firstname).ToList();

但是,我想知道如何使用电子邮件ICollection

标签: linqasp.net-web-api

解决方案


在某种程度上,您将不得不展平电子邮件集合,以便通过它对父集合进行排序,或者通过应用一些聚合函数,或者通过例如将其连接到字符串中。

例如,如果您假设列表中的第一个电子邮件地址是主要地址,那么仅按此项目排序可能是有意义的;

var orderedList = 
    instructors.OrderBy(i => i.PersonalDetails.Emails.FirstOrDefault()?.EmailAddress).ToList();

您还可以通过应用 Min() 聚合函数选择按列表中“最小”的电子邮件地址进行排序;

var orderedList = 
    instructors.OrderBy(x => x.PersonalDetails.Emails.Min(e => e.EmailAddress)).ToList();

推荐阅读