我想知道是否有人可以阐明一种基于子对象的属性对对象列表进行排序的方法。 我正在使用以下模型:
public class Content
{
public string Id { get; set; }
public List<ContentAttribute> Attributes { get; set; }
}
public class ContentAttribute
{
public string Value { get; set; }
public string Id { get; set; }
public string Name { get; set; }
}
一些示例数据:
[
{
"Id": "123",
"Attributes": [
{
"Value": "abc",
"Id": "1a",
"Name": "name1"
},
{
"Value": "ghi",
"Id": "2b",
"Name": "name2"
}
]
},
{
"Id": "456",
"Attributes": [
{
"Value": "abc",
"Id": "1a",
"Name": "name2"
},
{
"Value": "def",
"Id": "2b",
"Name": "name3"
}
]
},
{
"Id": "789",
"Attributes": [
{
"Value": "abc",
"Id": "1a",
"Name": "name1"
},
{
"Value": "def",
"Id": "2b",
"Name": "name2"
}
]
}
]
如何按特定属性Value
的{{1}}对Content对象排序?例如,我想按“ name2”的Name
对以上数据进行排序,
表示结果将是
Value
任何帮助将不胜感激。 (使用c#)。
答案 0 :(得分:4)
如果Attributes
始终有一个名称为name2
的元素,而您想要一个异常,则它不是:
var sorted = contents.OrderBy(c => c.Attributes.First(a => a.Name == "name2").Value).ToList();
或者如果name2
可能丢失并且不是交易破坏者,请使用FirstOrDefault
var sorted = contents.OrderBy(c => c.Attributes.FirstOrDefault(a => a.Name == "name2")?.Value).ToList();