【问题标题】:Sort item based on another collection item根据另一个集合项目对项目进行排序
【发布时间】:2022-01-06 02:13:47
【问题描述】:

我想对一个对象进行排序,并根据 LINQ 中的另一个集合项对对象进行排序。假设我有一个对象如下:

 [0] = { ID: 1090 , Name : Test1 }
 [1] = { ID: 120 , Name : Test2 }
 [2] = { ID: 1240 , Name : Test3 }

要根据这个项目集合进行排序

 ColItem : [0] = 1240
 [1] = 120
 [2] = 1090

所以预期的输出应该是:

 [0] = { ID: 1240 , Name : Test3 }
 [1] = { ID: 120 , Name : Test2 }
 [2] = { ID: 1090 , Name : Test1 }

我知道我可以通过在 ColItem 中执行循环来做到这一点,然后从对象映射 ID 字段中的值。但我想用一行代码在 LINQ 中完成。那可能吗?那么,如何在 LINQ 中使用单个查询来做到这一点?

【问题讨论】:

标签: c# linq


【解决方案1】:

以下代码适用于您的目的,但这不是我非常喜欢的:

class Collection1
{
    public int ID { get; set; }

    public string Name { get; set; }
}

class Collection2
{
    public int ID { get; set; }
}

...

var result = collection1s
      .Join(collection2s.Select((x, i) => new { Index = i, x.ID }), 
          c1 => c1.ID, c2 => c2.ID, (c1, c2) => new { c2.Index, c1.ID, c1.Name })
      .OrderBy(x => x.Index)
      .Select(x => new Collection1() { ID = x.ID, Name = x.Name } )
      .ToList();

我使用joinID的两个集合,然后使用第二个集合索引对结果进行排序,最后创建一个新对象作为第一个集合的类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多