3

问候!我想使用 LINQ 查询对象列表并按枚举值、字符串值对它们进行排序,然后将列表的其余部分以类似的方式排序 LINQ 新手在这里,所以要温柔。

//CTOR for my class
MyClass(id, "Name Value Here", Enum.EnumValueHere);

我创建了这些对象的列表,并希望对它们进行可变排序,以便所有具有 Enum.EnumValue[X] 的项目首先显示在列表中,按名称排序,然后是所有其他以类似方式排序的项目(几乎像 Union SQL 中的结果集)

//What I have so far (only sorts the list)
List<MyClass> = (from s in MyClass orderby s.EnumValue, s.NameValue  select s).ToList();

那里有任何大师有一些 LINQ 魔术可以分享吗?

谢谢!

4

2 回答 2

10

不确定你的意思,但你能用这样的东西吗?

// Using Color as enum just to make things clearer
class ClassyClass
{
    public string Name {get; private set;}
    public Color Color {get; private set;}
    public ClassyClass(id, string name, Color color) { ... }
}


var orderedList = collectionOfClassyClasses
            .OrderBy(x => x.Color != Color.Red) // False comes before true
            .ThenBy(x => x.Color)
            .ThenBy(x => x.Name)
            .ToList();

如果collectionOfClassyClasses是某种ClassyClass对象的集合,orderedList则将对其进行排序,以便所有颜色设置为红色的对象首先出现,按名称排序,然后所有其他对象按颜色排序,然后按名称排序。至少我认为它会......没有测试过:p 如果没有,请告诉我,呵呵。

于 2009-07-15T14:26:40.877 回答
0

您可以获取第一个列表并执行 list.AddRange() ,它需要一个可枚举的。

于 2009-07-15T14:10:35.177 回答