linq - 使用 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
?
解决方案
在某种程度上,您将不得不展平电子邮件集合,以便通过它对父集合进行排序,或者通过应用一些聚合函数,或者通过例如将其连接到字符串中。
例如,如果您假设列表中的第一个电子邮件地址是主要地址,那么仅按此项目排序可能是有意义的;
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();