基于另一个列表的列表排序
我有两个通用列表对象,其中一个包含ids和排序,另一个列表中的每个id都带有一个id,第二个列表中有id引用,例如第一个列表;基于另一个列表的列表排序
public class OptionType {
public int ID { get; set; }
public int Ordering { get; set; }
}
public class Option
{
public int ID { get; set; }
public int Type_ID { get; set; }
}
很明显,我可以通过做做一个简单的排序OptionTypes的名单上
types_list.OrderBy(x => x.Ordering);
的问题是,虽然,我怎么可能去利用下令“options_list“TYPE_ID”上与types_list的排序有关的对象。正如像(显然这是无效的 - 但希望你会明白我的意思!)
options_list.OrderBy(x => x.Type_ID == types_list.OrderBy(e => e.Ordering));
回答:
您应该能够使用连接来产生所需的输出。使用查询语法的示例。
var orderedOptions = from option in options_list join type in types_list
on option.Type_ID equals type.ID
orderby type.Ordering
select option;
回答:
我喜欢Lambda语法,所以我想出了这个等价的东西。我可以看到如何查询语法更清洁的连接。
var orderedOptions = options_list .Join(
types_list,
option => option.Type_ID,
type => type.ID,
(option, type) => new { Option = option, Type = type })
.OrderBy(x => x.Type.Ordering)
.Select(x => x.Option);
对于略微下降(是什么,我不知道),这将创建与刚刚订购属性的新对象,而不是整个Type类。这里没有太大的不同,但我有一个很大的类与排序数据,只需要排序属性。不知道它是否重要,但阅读更清晰。
var orderedOptions = options_list .Join(
types_list,
option => option.Type_ID,
type => type.ID,
(option, type) => new { Option = option, Ordering = type.Ordering })
.OrderBy(x => x.Ordering)
.Select(x => x.Option);
它看起来像查询语法可以让您在初始查询内进行排序,而lambda需要在连接创建新对象后进行排序。也许他们在封面下做着同样的事情:创建连接的对象,进行排序然后选择。
回答:
List.FindIndex()是你的朋友:
var orderedB = listB.OrderBy(b => listA.FindIndex(a => a.id == b.id));
工作例如:https://dotnetfiddle.net/CpLeFU
以上是 基于另一个列表的列表排序 的全部内容, 来源链接: utcz.com/qa/264722.html