C# 使用其他列表中的对象对C列表进行排序

C# 使用其他列表中的对象对C列表进行排序,c#,.net,C#,.net,我们有两个班: public class Object1 { public string Prop1 { get; set; } } public class Object2 { public string Prop2 { get; set; } } 并已: List<Object1> A; List<Object2> B; 在排序之后,我们期望: var expected = new List<Object1>

我们有两个班:

public class Object1
{
    public string Prop1 { get; set; }
}

public class Object2
{
    public string Prop2 { get; set; }
}
并已:

List<Object1> A;
List<Object2> B;
在排序之后,我们期望:

            var expected = new List<Object1>
            {
                new Object1{Prop1 = "a"},
                new Object1{Prop1 = "a_b"},
                new Object1{Prop1 = "a_b_c"},
                new Object1{Prop1 = "a_b_c"},
                new Object1{Prop1 = "x_y_z"},
            };

你很可能不得不这么做 查看共享对象类型和 第二种情况


在那里,您可以实现自定义相等比较器来比较您的数据类型。

要按另一个列表的顺序排序,您可以使用Join。这将保留外部集合(即B)的顺序,您可以选择内部集合的元素作为结果(即A)

然后,需要连接排序集合中不存在的元素

var allA = A.Concat(A.Except(sortedA));

你知道分拣的类型吗?你知道列表B是如何排序的吗?您可以再次使用该排序方法。是否要对A或其属性Prop1进行排序。那么您需要订购内部系列还是外部系列?如果是后者,您希望如何按内部集合对外部集合进行排序?它们有什么关系?你能举个例子吗?我不得不说,这可能不是最好的英语,但我发现问题很清楚。@M.Mimpen这是我工作问题的一个简单例子。列表B使用Forel算法进行排序,并带有一些扩展。所以我不能用这个方法对列表进行排序。列表B只包含按Forel标准可用的对象。@TimSchmelter我试着用最简单的例子来说明我需要什么。没有最好的英语,但试着再解释一遍。我必须按Prop1排序列表中的所有元素,其排序方式与列表B中的元素按Prop2排序相同。Prop1=Prop2。但是列表B中的Prop2是列表a中的Prop1集合的子集。所以你很清楚问题是什么?Prop1和Prop2不是单个字符串的集合;-这根本不起作用,它只是编译,因为集合将通过引用进行比较,这不是OP想要的。但是如果Prop2和Prop1不都是唯一的呢?Prop1集合可能有重复。Prop2可能有重复。对于我的工作解决方案,我无法从Prop1和Prop1中删除重复Prop2@TimSchmelterProp1和Prop2是字符串。公共字符串Prop1{get;set;}我不知道你在说什么?@TimSchmelter,看看你在说什么。对我来说,这是一个幸运的假设!;-这是一个移动的目标。@TimRogers很抱歉改变。移动目标-此任务的最佳解释:
var sortedA = B.Join (A, b => b.Prop2, a => a.Prop1, (b, a) => a).ToArray();
var allA = A.Concat(A.Except(sortedA));