对于这个尴尬的标题感到抱歉,这是一个简单的问题,有一个额外的扭曲,我无法弄清楚如何处理。假设我们有一个对象列表(在这种情况下,要联系的父级):
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
如果不是像学生111这样的实例,我可以使用Linq:
data.GroupBy(s => s.PupilNumber).Select(s => s.OrderBy(p => p.OrderBy)).Select(s => s.First()).ToList();
但是这会给111号学生送奶奶,我想要归还妈妈。我无法清理空的OrderBys,因为那样我就不会为学生333和444找到妈妈和爸爸。
有什么想法吗?
答案 0 :(得分:1)
尝试使用以下内容将空订单强制到列表底部:
students.GroupBy(s => s.Id).Select(s => s.OrderBy(p => p.Order ?? 9999)).Select(s => s.First()).ToList();
这有点俗气,但它确实有效。
答案 1 :(得分:1)
您可以使用任意低优先级编辑它们:
data.Select(s => new { s.Id, s.Parent, Order = s.Order ?? int.MaxValue.toString() }).GroupBy(s => s.PupilNumber)...