Cómo ordenar una colección creada por el usuario en C #

Deseo ordenar la colección List

sobre la base de una de las propiedades entre varios de esa clase de usuario que es definida por el usuario.

Es valido

 List objFunctionsList = new List(); // populating data in objFunctionsList objFunctionsList = objFunctionsList.OrderBy(x => x.Name).ToList(); 

Si su lista es lista, entonces:

 list.Sort((a, b) => { if (a==null) return (b==null) ? 0 : -1; if (b==null) return 1; if (a.Property==null) return (b.Property==null) ? 0 : -1; return a.Property.CompareTo(b.Property); }); 

Solo usa el método de extensión linq orderby

 var sorted=list.OrderBy(x=>x.MyProperty); 

Si necesita una lista como resultado, agregue ToList() por ejemplo,

 var sortedList=list.OrderBy(x=>x.MyProperty).ToList(); 

Alternativamente, podrías usar esta clase de Extensión

 public static class SortExtension { public static Comparison GetComparer(Expression>> propertyExpression) { if (propertyExpression == null) throw new ArgumentNullException(); var member = ((propertyExpression.Body is UnaryExpression) ? ((UnaryExpression)propertyExpression.Body).Operand : propertyExpression.Body) as MemberExpression; if (member == null) throw new ArgumentException(); var parameterA = Expression.Parameter(typeof(T), "a"); var parameterB = Expression.Parameter(typeof(T), "b"); var nullExpr = Expression.Constant(null); var valueA = Expression.Property(parameterA, member.Member.Name); var valueB = Expression.Property(parameterB, member.Member.Name); var compare = Expression.Call(valueA, typeof(TP).GetMethod("CompareTo", new[] { typeof(TP) }), valueB); var checkBPropNull = Expression.Condition(Expression.Equal(valueB, nullExpr), Expression.Constant(0), Expression.Constant(-1)); var checkAPropertyNull = Expression.Condition(Expression.Equal(valueA, nullExpr), checkBPropNull, compare); var checkBNullANot = Expression.Condition(Expression.Equal(parameterB, nullExpr), Expression.Constant(1), checkAPropertyNull); var checkBNullANull = Expression.Condition(Expression.Equal(parameterB, nullExpr), Expression.Constant(0), Expression.Constant(-1)); var checkANull = Expression.Condition(Expression.Equal(parameterA, nullExpr), checkBNullANull, checkBNullANot); return (a, b) => Expression.Lambda>(checkANull, parameterA, parameterB).Compile()(a, b); } public static void SortBy(this List source, Expression>> propertyExpression) { if (source == null) throw new ArgumentNullException(); source.Sort(GetComparer(propertyExpression)); } } 

Entonces puedes simplemente hacer

list.SortBy (x => x.MyProperty);

El edificio de Expresión produce un comparador que es funcionalmente equivalente a

 list.Sort((a,b) => { if (a == null) return (b==null) ? 0 :-1; if (b==null) return 1; if (a.MyProperty == null) return (b.MyProperty==null) ? 0 : -1; return a.T1.CompareTo(b.T1); }); 
 users.Sort((u1, u2) => { return u1.Age.CompareTo(u2.Age); }); 

Esto ordenará por Age por ejemplo.