我有两个清单。一个是动态的对象列表。另一个是字符串列表。我想根据其他列表对对象列表进行排序。
Page 1
+----+-----------+
| ID | Continent |
+----+-----------+
| 01 | Europa |
+----+-----------+
+----+-------------+
| ID | Countries |
+----+-------------+
| 01 | Italia |
+----+-------------+
| 02 | Switzerland |
+----+-------------+
| 03 | Germany |
+----+-------------+
Page 2
+----+-----------+
| ID | Continent |
+----+-----------+
| 01 | America |
+----+-----------+
+----+-------------+
| ID | Countries |
+----+-------------+
| 01 | USA |
+----+-------------+
| 02 | Equador |
+----+-------------+
| 03 | Perù |
+----+-------------+
| 04 | Etc. |
+----+-------------+
这些对象具有“alphabets”属性之一,必须对其进行排序。
对象可能不等于第二个列表中的元素数。
答案 0 :(得分:0)
如果两个列表的索引符合您的要求,那么这样的事情可能会起作用。您必须确保列表具有相同的长度才能使其正常工作。
var result = list1
.Select((item, index) =>
new
{
Item = item,
Order = list2[index]
})
.OrderBy(x => x.Order)
.Select(x => x.Item);
如果它们的长度不同,订单的标准是什么?那将是一个未定义的问题。一种方法是将它们放在列表的末尾。
var result = list1.Take(list2.Length)
.Select((item, index) =>
new
{
Item = item,
Order = list2[index]
})
.OrderBy(x => x.Order)
.Select(x => x.Item);
var concatted = result.Concat(list1.Skip(list2.Length));
答案 1 :(得分:0)
好吧,假设List1包含一个对象列表,并且每个对象都包含一个名为" alphabet"的属性,并且您想要对此对象列表进行排序,但是在List2中指定了排序顺序按排序顺序排列的字母表的可能值,然后你可以这样做:
int i=0;
var List2WithRowNum = from str2 in List2.AsEnumerable() select new{ rowNum = i++, str2 };
var sortedList = from obj1 in List1.AsEnumerable()
join strKey in List2WithRowNum.AsEnumerable() on ((listObject)obj1).alphabet equals strKey.str2
orderby strKey.rowNum
select obj1;
sortedList将是原始对象(来自List1)的列表,按其"字母表排序"属性,以List2顺序。