Click here to Skip to main content
13,354,132 members (55,627 online)
Click here to Skip to main content
Add your own
alternative version

Tagged as


8 bookmarked
Posted 27 Jan 2013

Sorting C# collections that have no collating sequence

, 28 Jan 2013
Rate this:
Please Sign up or sign in to vote.
This is an alternative for "Sorting using C# Lists"


This Tip/Trick is an alternative to the original tip Sorting using C# Lists[^].

You often face the issue that a given class has not one Collating Sequence[^] but many various ways to order the class objects. This alternative tip shows how to choose the ordering without depending on the class implementing IComparable[^].

Sorting alternatives to "hard coded" IComparable dependency

A class that has no natural Collating Sequence[^] should not implement IComparable<T>. Instead, one should use a per case defined ordering. Some concise solutions are shown below. They do not need any definition of any additional IComparer class nor do they require the element class to implement IComparable.

By LINQ means

Sorting by LINQ is as follows:
var querySortedByProperty = from element in collection
                            select element;
foreach(var item in querySortedByProperty) { ... }

By Enumerable extension methods

Sorting equivalent to LINQ by Enumerable[^] extension method calls:
var querySortedByProperty = collection.OrderBy(e=>;
foreach(var item in querySortedByProperty) { ... }

By Sorting overload

Sorting a colleciton is also possible by a Sort overload that takes a delegate for ordering the elements of the collection:
foreach(var item in colleciton) { ... }

Using the code

Assuming the following class analogous to the one from the original tip without implementing IComparable<T>.

public class Student
    public string Name { get; private set; }
    public int Age { get; private set; }
    public Student(string name, int age)
        Name = name;
        Age = age;
var querySortByName = from s in students orderby s.Name select s;
var querySortByAge = from s in students orderby s.Age select s;
Extension methods:
var querySortByName = students.Orderby(s=>s.Name);
var querySortByAge = students.Orderby(s=>s.Age);
Sort collection:

Points of Interest

Checkout 101 LINQ samples[^]. That gives many first steps on LINQ operations.


V1.02013-01-26Initial version.
V1.12013-01-28Fixed some typos.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Andreas Gieriet
Founder eXternSoft GmbH
Switzerland Switzerland
I feel comfortable on a variety of systems (UNIX, Windows, cross-compiled embedded systems, etc.) in a variety of languages, environments, and tools.
I have a particular affinity to computer language analysis, testing, as well as quality management.

More information about what I do for a living can be found at my LinkedIn Profile and on my company's web page (German only).

You may also be interested in...


Comments and Discussions

Questionhelpful Pin
Member 871442118-May-16 11:56
memberMember 871442118-May-16 11:56 
GeneralMy vote of 5 Pin
adriancs28-Jan-13 15:49
mvpadriancs28-Jan-13 15:49 
GeneralRe: My vote of 5 Pin
Andreas Gieriet28-Jan-13 18:19
memberAndreas Gieriet28-Jan-13 18:19 
GeneralMy vote of 5 Pin
ProgramFOX28-Jan-13 7:13
member ProgramFOX28-Jan-13 7:13 
GeneralRe: My vote of 5 Pin
Andreas Gieriet28-Jan-13 8:09
memberAndreas Gieriet28-Jan-13 8:09 
GeneralMy vote of 5 Pin
SRIRAM 227-Jan-13 23:23
memberSRIRAM 227-Jan-13 23:23 
GeneralRe: My vote of 5 Pin
Andreas Gieriet27-Jan-13 23:24
memberAndreas Gieriet27-Jan-13 23:24 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.180111.1 | Last Updated 28 Jan 2013
Article Copyright 2013 by Andreas Gieriet
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid