通过另一个列表中的值匹配来排序对象列表

时间:2018-05-13 20:14:16

标签: c# list linq sorting

我有两个(几乎总是)相同的列表由不同类型的对象组成,但具有一些共同的属性(并且始终是唯一的值):

List<Object1> list1 = new List<Object1>();
List<Object2> list2 = new List<Object2>();

然后我需要根据具有list2的属性的匹配顺序来订购list1

示例:

list1:

0, "FMS", prop2, prop3; 
1, "KFF", prop2, prop3; 
2, "FOA", prop2, prop3;
3, "RDA", prop2, prop3;
4, "KFP", prop2, prop3; 

list2:

Before:
991, prop1, "RDA", prop2, prop3, etc; 
992, prop1, "FMS", prop3, prop4, etc;
993, prop1, "KFF", prop3, prop4, etc;
994, prop1, "KFP", prop3, prop4, etc;
995, prop1, "FOA", prop3, prop4, etc;

After:
992, prop1, "FMS", prop3, prop4, etc;
993, prop1, "KFF", prop3, prop4, etc;
995, prop1, "FOA", prop3, prop4, etc;
991, prop1, "RDA", prop3, prop4, etc;
994, prop1, "KFP", prop3, prop4, etc;

我需要像

这样的东西
list2.OrderBy(x => Where(list1.prop1 == list2.prop2))

我希望这很清楚。

1 个答案:

答案 0 :(得分:4)

使用FindIndex

list2.OrderBy(x => list1.FindIndex(y => y.prop1 == x.prop2));

请注意,如果没有找到与谓词匹配的项目,您将返回-1,因此所有这些项目都将堆积在顶部(当然,您可以编写代码以完全忽略它们,或者将它们堆积下来在底部,或其他什么。