【问题标题】:C# Linq Order a list with a reference list [duplicate]C# Linq 使用引用列表排序列表[重复]
【发布时间】:2018-11-21 13:15:43
【问题描述】:

我有两个列表,我需要将一个列表与另一个列表排序。

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,我的问题中没有这种情况。我根据orderList得到itemList。如果您有一个解决方案来获取按 orderList 排序的 itemList,那么它也被接受
  • @Fabjan 我没有看到 OP 的评论,所以我更新了他的问题。

标签: c# linq


【解决方案1】:

您可以使用LINQ 并通过它们在其他数组中的索引对项目进行排序:

var orderedItemList = itemList.OrderBy(x => orderList.IndexOf(x.Id)).ToList();

【讨论】:

    【解决方案2】:

    您可以执行以下 linq 来解决您的问题:

     List<Branch> sortedProducts = new List<Branch>();
    
     orderList.ForEach(x => sortedProducts.Add(itemList.FirstOrDefault(ele => ele.Id == x)));
    

    注意:- 这里只会添加索引在 orderList 中的那些元素。

    【讨论】:

    • 感谢您标记为重复。我没找到,你找到了。
    【解决方案3】:

    您可以执行以下操作:

    itemList = itemList.OrderBy(d => orderList.IndexOf(d.Id)).ToList();
    

    【讨论】:

      【解决方案4】:

      您可以通过orderListId的索引来订购:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-10
        • 1970-01-01
        • 2021-11-24
        相关资源
        最近更新 更多