基于另一个列表的列表排序

我有两个通用列表对象,其中一个包含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

回到顶部