我有一个对象
TestCollection testCollection = new TestCollection()
{
new Test
{
quickTest =
new QuickTest
{
id = a,
sortField = 3,
nestedQuickTest =
new List<NestedQuickTest>
{
new NestedQuickTest{sortField = 1},
new NestedQuickTest{sortField = 2},
new NestedQuickTest{sortField = 3},
new NestedQuickTest{sortField = 4},
}
}
},
new Test
{
quickTest =
new QuickTest
{
id = b,
sortField = 2,
nestedQuickTest =
new List<NestedQuickTest>
{
new NestedQuickTest{sortField = 21},
new NestedQuickTest{sortField = 32},
new NestedQuickTest{sortField = 11},
new NestedQuickTest{sortField = 2},
}
}
},
new Test
{
quickTest =
new QuickTest
{
id = c,
sortField = 1,
nestedQuickTest =
new List<NestedQuickTest>
{
new NestedQuickTest{sortField = 3},
new NestedQuickTest{sortField = 2},
new NestedQuickTest{sortField = 8},
new NestedQuickTest{sortField = 1},
}
}
},
};
1)我想使用lambda表达式对此对象进行排序。
2)我想在Asc顺序中取回按第一个排序的对象,然后按Asc顺序取回
3)我想删除嵌套List&lt;&gt;中的最后一个属性物体,每个物体只有两个物体
如果这有点令人困惑我道歉但我想做这样的事情:
var sorted = testCollection.OrderBy(x =&gt; x.quickTest.sortField).ThenBy(y =&gt; y.quickTest.nestedQuickTest.Select(z =&gt; z.sortField))。Take(2);
最终结果将是:
TestCollection testCollection = new TestCollection()
{
,
new Test
{
quickTest =
new QuickTest
{
id = c,
sortField = 1,
nestedQuickTest =
new List<NestedQuickTest>
{
new NestedQuickTest{sortField = 1},
new NestedQuickTest{sortField = 2}
}
}
},
new Test
{
quickTest =
new QuickTest
{
id = b,
sortField = 2,
nestedQuickTest =
new List<NestedQuickTest>
{
new NestedQuickTest{sortField = 2},
new NestedQuickTest{sortField = 11}
}
}
}
};
在此先感谢你的帮助,我似乎无法得到我想要的结果,而且我知道我遗漏了一些明显的东西。
答案 0 :(得分:1)
如果我理解你要说的是你想通过具有NestedObject的属性在MyOrderList中对对象进行排序,NestedObject是一个对象集合,它们本身应该按照AnotherNestedObject的值排序,它也是一个列表。
首先,你需要实现一个Icomparer或类似的东西来设置使一个列表比另一个更大的规则。
请参阅,您希望按值对列表中的对象进行排序,如果它是一个int,那很容易,但作为一个列表,有哪些规则可以确定哪一个更大?它是具有更多元素的那个吗?具有最大元素总和的那个?
你需要弄清楚这个
编辑:
好的,我想我更了解你的问题,你只想通过int命令外部列表对象,然后在每个订购的元素中也有列表。
我认为如果你通过以下两个步骤执行此操作会更容易:
var orderedTestCollection = testCollection.Orderby(tc=>tc.quickTest.SortField) // orders all the testCollection objects
//orders and only takes 2 elements of the lists inside the each test collection object
foreach(var tc in testCollection)
{
tc.quickTest.NestedQuickTest = tc.quickTest.NestedQuickTest.Orderby(nqt=>nqt.SortField).Take(2);
}