用 C# Linq 根据参考列表对列表进行排序

5
我有两个列表,需要用另一个列表对其中一个进行排序。
var orderList = new List<long>() {4, 55, 34};
var itemList = new List<Branch>() { {Id=55, Name="X"},  {Id=34, Name="Y"}, {Id=4, Name="Z"} }; 

我该如何按照第一个列表orderList的顺序来排列第二个列表itemList?是否有一种简洁的linq方法?
更新: orderList将始终包含所有预期的Id分支,这些分支都包含在itemList中。

itemList 中不存在于 orderList 的项目应该如何处理?在这种情况下,它们应该如何排序? - Fabjan
@Fabjan,我的问题中没有这种情况。我根据orderList获取itemList。如果您有一种解决方案可以按orderList排序获取itemList,则也可以接受。 - ahmet
1
@Fabjan,我没有看到原帖的评论,所以我更新了他的问题。 - CodeNotFound
4个回答

4
您可以使用 LINQ 根据另一个数组中的索引对项目进行排序:
var orderedItemList = itemList.OrderBy(x => orderList.IndexOf(x.Id)).ToList();

4

您可以使用以下linq来解决您的问题:

 List<Branch> sortedProducts = new List<Branch>();

 orderList.ForEach(x => sortedProducts.Add(itemList.FirstOrDefault(ele => ele.Id == x)));

注意:只有在orderList中存在索引的元素才会被添加。

1
感谢您将其标记为重复内容。我找不到它,而您找到了。 - ahmet

2
您可以执行以下操作:
itemList = itemList.OrderBy(d => orderList.IndexOf(d.Id)).ToList();

2

您可以按照orderListId的索引进行排序:

var result = itemList.OrderBy(e => orderList.IndexOf(e.Id)).ToList();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接