如何在LINQ中将多个OrderBy用于未指定的号码?

时间:2019-02-11 14:49:38

标签: c# linq

所以我知道您可以像使用LINQ一样使用OrderBy:

MyList.OrderBy(x => x.foo[0].Value).ThenByDescending(x => x.foo[1].Value);

但是,我不知道x.foo有多少个属性,我想按所有属性进行订购。这可能吗?

编辑:在这种情况下,x.foo是KeyValuePair的列表,我在其中按值按键顺序对它们进行排序。

1 个答案:

答案 0 :(得分:7)

提供至少一个项目,并且所有项目都具有相同数量的“ foos”

int foosPerItem = MyList.First().Foo.Count;

IOrderedEnumerable<T> ordered = MyList.OrderBy(x => x.foo[0].Value);

for (int i = 1; i < foosPerItem; i++)
{
    ordered = ordered.ThenByDescending(x => x.foo[i].Value);
}

// added after your comment:
// ordered = ordered.ThenByDescending(x => x.bar);

在您对其他先按栏排序的评论之后:

IOrderedEnumerable<T> ordered = MyList.OrderBy(x => x.bar);

for (int i = 0; i < foosPerItem; i++)
{
    ordered = ordered.ThenByDescending(x => x.foo[i].Value);
}