如何根据C#中的另一个已排序列表对IList进行排序?

如何根据C#中的另一个已排序列表对IList进行排序?,c#,list,sorting,C#,List,Sorting,我有两个IList(不同类型),a和b。 它们大小一样,因为 每个a.G.Id正好匹配一个b.G.Id. b已排序(因为有一个OrderBy(b=>b.SortVal)。现在我想对列表a进行排序。 (如果我有一个a.SortVal,只对a进行排序,而不需要第二个列表的帮助,经典的排序算法会有所帮助,但事实并非如此) 应该这样做 基本上,创建一个字典,通过gId来识别a中的项目,然后在b中循环(排序)项目时使用它,应该按照b中的顺序返回a中的项目 字典用于使查找比扫描更快。您可以执行以下操作: a

我有两个IList(不同类型),
a
b
。 它们大小一样,因为 每个a.G.Id正好匹配一个b.G.Id.

b
已排序(因为有一个
OrderBy(b=>b.SortVal)
。现在我想对列表
a
进行排序。 (如果我有一个
a.SortVal
,只对
a
进行排序,而不需要第二个列表的帮助,经典的排序算法会有所帮助,但事实并非如此)

应该这样做

基本上,创建一个字典,通过
gId
来识别
a
中的项目,然后在
b
中循环(排序)项目时使用它,应该按照
b
中的顺序返回
a
中的项目


字典用于使查找比扫描更快。

您可以执行以下操作:

a = a.OrderBy(x => b.FindIndex(b.G.Id == x.gId));
我以前回答过一个与此类似的问题,但不是完全重复的问题。

我确实回答了
。在初始化
b
时包括(x=>x.G)
。 然后我定义并初始化了一个新列表
bIds=b.Select(b=>b.G.Id).ToList();

成功了


(在的帮助下)

在C#代码中可以使用存储过程(SQL)。但是我应该写一个新的问题:“我没有找到这个案例的副本!”除了搜索精确的副本之外,您还尝试过其他方法吗?到目前为止,您自己的尝试是什么?
a = a.OrderBy(x => b.FindIndex(b.G.Id == x.gId));
a = a.OrderBy(x => bIds.IndexOf(x.G.Id)).ToList();