[英]How to do order by child class property for a list of parent class?
在这里,父类在子类中具有子类,我们通过使用子类的name属性来命名如何将父列表作为订单。 我使用了pq.OrderBy(z => z.Class1.Name!= null).ToList(); 但是列表未按预期顺序排序。
class Program
{
static void Main(string[] args)
{
List<Parent> pq = new List<Parent>() {
new Parent () { Class1=new Child () { Name="d" } },
new Parent () { Class1=new Child () { Name="s" } },
new Parent () { Class1=new Child () { Name="y" } },
new Parent () { Class1=new Child () { Name="r" } },
new Parent () { Class1=new Child () { Name="b" } },
new Parent () { Class1=new Child () { Name="a" } }
};
var assa = pq.OrderBy(z => z.Class1.Name != null).ToList();
}
}
public class Parent
{
public Child Class1 { get; set; }
}
public class Child
{
public string Name { get; set; }
}
如果您只想要有序列表,可以使用以下命令:
var assa = pq.OrderBy(p => p.Class1.Name).ToList();
如果Class1
属性可能为null,请使用以下命令:
var assa = pq.Where(p => p.Class1 != null).OrderBy(p => p.Class1.Name).ToList();
如果要在结果List
的末尾具有Class1
为null的那些对象:
var assa = pq.Where(p => p.Class1 != null).OrderBy(p => p.Class1.Name).ToList();
assa.AddRange(pq.Where(p => p.Class1 == null));
只需使用Name
属性作为调用OrderBy
函数的参数,即可获得所需的结果:
var assa = pq.OrderBy(z => z.Class1.Name).ToList();
您的代码中的问题是您提供了一个用于确定顺序的布尔标准。 由于列表中所有根据此条件检查的元素都将返回true->顺序保持不变。 您可以通过将最后一项的名称设置为null
。
new Parent () { Class1=new Child () { Name="d" } },
new Parent () { Class1=new Child () { Name="s" } },
new Parent () { Class1=new Child () { Name="y" } },
new Parent () { Class1=new Child () { Name="r" } },
new Parent () { Class1=new Child () { Name="b" } },
new Parent () { Class1=new Child () { Name=null } }
在这种情况下,您的原始查询将导致最后一项的排序为第一个
var assa = pq.OrderBy(z => z.Class1.Name != null).ToList();
问题是您的订购功能:
var assa = pq.OrderBy(z => z.Class1.Name != null).ToList();
如果您注意到,则从该函数返回一个布尔值:
z => z.Class1.Name != null
您想要的是返回Name属性的值:
z => z.Class1.Name
更改为此:
var assa = pq.OrderBy(z => z.Class1.Name).ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.