Linq从groupby中选择1,取null或空,除非有数字1
本文关键字:或空 数字 null 选择 Linq groupby | 更新日期: 2023-09-27 18:17:47
很抱歉这个尴尬的标题,这是一个我不知道如何处理的简单问题。假设我们有一个对象列表(在本例中是要联系的父对象):
class Student
{
public string Id { get; set; }
public string Parent { get; set; }
public string Order { get; set; }
}
List<Student> students = new List<Student>();
students.Add(new Student() { Id = "111", Parent = Grandma, Order= });
students.Add(new Student() { Id = "111", Parent = Mom, Order = 1 });
students.Add(new Student() { Id = "111", Parent = Dad, Order = 2 });
students.Add(new Student() { Id = "222", Parent = Mom, Order = 1 });
students.Add(new Student() { Id = "222", Parent = Dad, Order = 2 });
students.Add(new Student() { Id = "333", Parent = Mom, Order = });
students.Add(new Student() { Id = "444", Parent = Dad, Order = });
期望的返回值:
111 Mom
222 Mom
333 Mom
444 Dad
如果不是像student 111这样的实例,我可以使用Linq:
data.GroupBy(s => s.PupilNumber).Select(s => s.OrderBy(p => p.OrderBy)).Select(s => s.First()).ToList();
但是对于学生111,这里返回的是Grandma,而我想返回的是Mom。我不能清除空OrderBys,因为那样我就不能得到学生333和444的妈妈和爸爸。
任何想法?
尝试使用如下命令将空顺序强制放到列表的底部:
students.GroupBy(s => s.Id).Select(s => s.OrderBy(p => p.Order ?? 9999)).Select(s => s.First()).ToList();
您可以使用任意低优先级预先编辑它们:
data.Select(s => new { s.Id, s.Parent, Order = s.Order ?? int.MaxValue.toString() }).GroupBy(s => s.PupilNumber)...