LINQ - 使用Order By Enum Value和Union结果集对对象列表进行排序?

时间:2009-07-15 13:58:16

标签: c# linq linq-to-objects

问候!我想使用LINQ来查询对象列表并按枚举值对它们进行排序,然后将字符串值联合起来,以类似的方式将列表的其余部分排序LINQ newbie here,所以要温和。

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

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

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

任何Guru都有一些LINQ Magic可以分享?

谢谢!

2 个答案:

答案 0 :(得分: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让我知道如果没有,呵呵。

答案 1 :(得分:0)

你可以拿第一个列表并做一个list.AddRange(),它带有一个不可数。