我有两个(几乎总是)相同的列表由不同类型的对象组成,但具有一些共同的属性(并且始终是唯一的值):
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))
我希望这很清楚。
答案 0 :(得分:4)
使用FindIndex
:
list2.OrderBy(x => list1.FindIndex(y => y.prop1 == x.prop2));
请注意,如果没有找到与谓词匹配的项目,您将返回-1,因此所有这些项目都将堆积在顶部(当然,您可以编写代码以完全忽略它们,或者将它们堆积下来在底部,或其他什么。