根据另一个集合项目对项目进行排序
Posted
技术标签:
【中文标题】根据另一个集合项目对项目进行排序【英文标题】: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 中使用单个查询来做到这一点?
【问题讨论】:
这能回答你的问题吗? Sort a collection based on another collection 使用 LINQ 在 C# 中排序列表? ***.com/questions/4003835/… 【参考方案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();
我使用join
ID
的两个集合,然后使用第二个集合索引对结果进行排序,最后创建一个新对象作为第一个集合的类型。
【讨论】:
以上是关于根据另一个集合项目对项目进行排序的主要内容,如果未能解决你的问题,请参考以下文章