是否可以使用LINQ对IEnumerable列表中的项进行排序?
例如:
IEnumerable<sample> sam = new List<sample>()
{
new sample{ id = 1, name = "sample 1", list = new List<int>{5,6,1}},
new sample{ id = 2, name = "sample 1", list = new List<int>{2,9}},
new sample{ id = 3, name = "sample 1", list = new List<int>{8,3,7}},
new sample{ id = 4, name = "sample 1", list = new List<int>{8,4,3}},
new sample{ id = 5, name = "sample 1", list = new List<int>{5,1,7}},
new sample{ id = 6, name = "sample 1", list = new List<int>{6,9,7}}
};
上面给出的样本的预期输出将是List中的排序值。 预期产出是:
sample{ id = 1, name = "sample 1", list = new List<int>{1,5,6}},
sample{ id = 2, name = "sample 1", list = new List<int>{2,9}},
sample{ id = 3, name = "sample 1", list = new List<int>{3,7,8},
sample{ id = 4, name = "sample 1", list = new List<int>{3,4,8}},
sample{ id = 5, name = "sample 1", list = new List<int>{1,5,7}},
sample{ id = 6, name = "sample 1", list = new List<int>{6,7,9}}
谢谢
答案 0 :(得分:1)
尝试,
sam.All(p => { p.list.Sort(); return true; });
答案 1 :(得分:0)
((List<sample>)sam).ForEach(s => s.list.Sort());
答案 2 :(得分:0)
LINQ的一般形状是它不会改变原始数据。例如,如果我们有一个列表
var ints = new List<int>{5,6,1};
并使用linq'排序'
var sorted = ints.OrderBy();
我们最终得到两个列表
ints => { 5,6,1}
sorted => {1,5,6}
在上面的示例中,它取决于您希望输出的内容
如果您想要一个新的样本列表,其中列表已经排序,那么您可以使用
var newSampleList = samples.Select( sam => new Sample {
id = sam.id,
name = sam.name,
list = new List<int>(sam.list.OrderBy())
});
如果您不想创建新列表但想要对值进行排序,那么它实际上并不是LINQ的目的,但可以使用AVD的答案来执行每个成员的执行功能(在这种情况下)在列表上调用排序。)
注意:这仅在sample.list被定义为List()时才有效,因为Sort()仅存在于List&lt;&gt;上。如果定义为IList或IEnumerable,它将无效。