我有两个(几乎总是)相等的列表,这些列表由不同类型的对象组成,但是具有一些公共属性(并且总是唯一的值):
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))
我希望这足够清楚。
最佳答案
使用FindIndex
:
list2.OrderBy(x => list1.FindIndex(y => y.prop1 == x.prop2));
请注意,如果没有找到与谓词匹配的项目,则将返回-1,因此所有这些项目都将堆积在顶部(当然,您可以编写代码以完全忽略它们,或者将它们堆积在底部) , 管他呢。
关于c# - 在另一个列表中按值匹配顺序排列对象列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50320250/