问候!我想使用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可以分享?
谢谢!
答案 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(),它带有一个不可数。