Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linq OrderBy does not sort a List<T>. How do I sort the list?

Tags:

c#

linq

Having issues with the OrderBy clause not having any impact on the sort. I have walked through this in the debugger and insuring this is a case that the sort line of the code is being hit and reviewing the results after it the order by has not been applied.

public static IEnumerable<DDLOptions<TValueType>> GetDDLOptionsViewModel<TClass, TValueType>(
            IEnumerable<TClass> list, 
            Func<TClass, TValueType> value, 
            Func<TClass, string> displayText,
            bool sort = true
        )
        {
            List<DDLOptions<TValueType>> ddlOptions;

            ddlOptions = list.Select(
                l => new DDLOptions<TValueType>
                        {
                            Value = value(l),
                            DisplayText = displayText(l)
                        }
                    ).ToList();  <========== Works if I put the Order By here.

            if (sort)
            {
                ddlOptions.OrderBy(l => l.DisplayText); <===== Does NOT work here.
            }

            return ddlOptions;
        }
like image 219
crichavin Avatar asked Jan 18 '13 16:01

crichavin


2 Answers

OrderBy returns a query that would perform the ordering: it does not modify the original list (whereas something like List<T>.Sort would modify the original)

Instead try something like:

ddlOptions = ddlOptions.OrderBy(l => l.DisplayText).ToList();

EDIT: You might want to play around with the type of ddlOptions or where/how you return the data as we're doing an extra ToList than probably necessary, but that's probably a minor/non-issue for this case anyway.

like image 111
Chris Sinclair Avatar answered Nov 08 '22 23:11

Chris Sinclair


Try:

if (sort)
{
    ddlOptions = ddlOptions.OrderBy(l => l.DisplayText); <===== Should work now.
}
like image 35
Venson Avatar answered Nov 09 '22 01:11

Venson