OrderByDescending无法正确排序List <string>

时间:2019-01-18 07:47:03

标签: c# linq sorting

更新:

必须将返回Linq列表分配给变量'columnData':

columnData = columnData.OrderBy(s => s).ToList();

我在使用OrderByDescending排序简单的字符串列表时遇到麻烦。如果我先使用.Sort()然后使用.Reverse(),那么它就可以正常工作,因为我已经读过.Sort()可以自然排序,但是在生产代码中使用.Reverse()降序的做法是不好的做法。所以我这样做是这样的:

if(sortOrder == 1)
        {
            columnData.OrderBy(s => s);
        }
        else
        {
            columnData.OrderByDescending(s => s);
        }

但是在升序或降序后我得到的是:

enter image description here

但是,如果我使用Sort()和Reverse(),它将正确排序。

Linq排序有什么问题?

3 个答案:

答案 0 :(得分:2)

OrderBy不会更改列表的值。它返回一个新的有序集合,所以您要做的是:

    if(sortOrder == 1)
    {
        columnData = columnData.OrderBy(s => s).ToList();
    }
    else
    {
        columnData = columnData.OrderByDescending(s => s).ToList();
    }

答案 1 :(得分:1)

    if (sortOrder == 1)
    {
        columnData = columnData.OrderBy(s => s);//.ToList();
    }
    else
    {
        columnData = columnData.OrderByDescending(s => s);//.ToList();
    }

答案 2 :(得分:1)

您不使用返回的值OrderBy()OrderByDescending()。 如LINQ documentation中所述,这些方法返回一个System.Linq.IOrderedEnumerable<TSource>