ICollection属性使用LINQ在ASP.Core中排序

时间:2019-02-19 04:41:16

标签: linq asp.net-web-api

如何对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();

我可以使用以下代码使用教师名称进行排序:

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

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

1 个答案:

答案 0 :(得分:0)

以某种方式,您将必须平整Email集合,以便通过应用某些聚合函数或例如将其连接到字符串中来对父集合进行排序。

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

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();