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

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/

10-14 18:06
查看更多