我想说我希望我的用户能够根据枚举值对表进行排序
我的枚举看起来像这样:
public enum Letter
{
C= 0,
A,
B,
E,
D,
}
查询可能如下所示:
var letters = from l in context.Example
orderby l.Letter
select l;
升序/降序将基于enum int值而不是字母顺序。有没有一种简单的方法按字母顺序以编程方式排序?显然我可以在我的Enum Class中自己排序,但这可能会成为更大的枚举上的平凡工作。
我希望如何排序:
//A ACTUAL //C
//B ACTUAL //A
//C ACTUAL //B
//D ACTUAL //E
//E ACTUAL //D
答案 0 :(得分:3)
您可以使用Enum.GetName
方法(或ToString()
,如果我们可以依赖它将返回名称):
var letters = from l in context.Example
orderby Enum.GetName(l.Letter.GetType(),l.Letter)
select l;
如果l.Letter
可以返回不同的枚举,这也可以有效。但是如果它返回非枚举,它将失败。这可能是(非)想要的行为。如果您使用ToString()
,则根据其名称比较对象。但是任何对象(通常)都支持ToString()
方法。
例如:
csharp> enum Foo {
> A,
> B,
> C
> }
csharp> enum Bar {
> AB,
> ZZ,
> X
> }
csharp> var l = new object[] {Foo.C,Foo.B,Bar.ZZ,Bar.AB,Bar.X,Foo.A};
csharp> from li in l orderby Enum.GetName(li.GetType(),li) select li;
{ A, AB, B, C, X, ZZ }
话虽如此,将枚举混合在一起通常没什么意义。
答案 1 :(得分:3)
您可以使用此代码段:
Letter[] allletters = Enum.GetValues(typeof(Letter)).Cast<Letter>().ToArray();
var sortedLetters = allletters.OrderBy(l => l.ToString());
答案 2 :(得分:0)
尝试以下方法:
Letter[] letters = (Letter[])Enum.GetValues(typeof(Letter));
IEnumerable<Letter> sorted = values.OrderBy(v => v.ToString());