linq orderby有条件

时间:2015-04-03 11:02:36

标签: c# linq sorting

如何订购条件

的清单

举个例子:

我有一份INT列表

{1,45,63,1,2,100,46,12,2,100} 在代码中:

int[] ints = {1,45,63,1,2,100,46,12,2,100};

我想以两种方式订购ASC和DESC意味着:

            switch (this.SortMode)
            {
                case ReportSortMode.DESC:
                    Rank = Rank.OrderByDescending();
                    break;
                case ReportSortMode.ASC:
                    Rank = Rank.OrderBy();
                    break;
            }

但我需要获得条件中的值:

ASC:{1,1,2,2,12,45,46,63,100,100}

DESC:{63,46,45,12,2,2,1,1,100,100}

表示: Where(x =>x < 100)

可能使用Except之类的:

var fakeval = rank.where(x => x<100)
switch (this.SortMode)
{
    case ReportSortMode.DESC:
         Rank = Rank.OrderByDescending().Except(fakeval);
    break;
    case ReportSortMode.ASC:
         Rank = Rank.OrderBy();
    break;
}

//to be full))
public enum ReportSortMode
{
    DESC = 1,
    ASC = 2,
}

但是没有工作

2 个答案:

答案 0 :(得分:4)

对于 ASC 订单,您无需进行任何更改:

var intsasc = ints.OrderBy(x=>x);

对于 DESC ,下面的代码应该没问题:

var intsdesc = ints.OrderByDescending(x=>x<100 ? 1 : 0).ThenByDescending(x=>x);

结果:

63 
46 
45 
12 
2 
2 
1 
1 
100 
100 

答案 1 :(得分:2)

ASC:

ints
    .OrderBy(x => x < 100)
    .ThenBy(x => x)

DESC:

ints
    .OrderBy(x => x < 100)
    .ThenByDescending(x => x)

注意:不完全确定true是在错误之前还是相反的方式。您可能需要将OrderBy更改为OrderByDescending。

相关问题