C# 排序IList

C# 排序IList,c#,.net,ilist,C#,.net,Ilist,可能重复: 我有一个IList,其中关键字是一个包含标题字符串和键号的类。我希望根据密钥对这个IList进行排序。是否有我可以使用的内置C功能?更新: 您可以使用OrderBy或OrderByDescending 或 如果您有IList或IEnumerable,可以使用以下链接 您可以为此使用: var result = listOfObject.OrderBy(item => item.key).ToList(); 对于按降序排序,请使用 如果您使用的是.net framework

可能重复:

我有一个IList,其中关键字是一个包含标题字符串和键号的类。我希望根据密钥对这个IList进行排序。是否有我可以使用的内置C功能?

更新: 您可以使用OrderBy或OrderByDescending

如果您有IList或IEnumerable,可以使用以下链接

您可以为此使用:

var result = listOfObject.OrderBy(item => item.key).ToList();
对于按降序排序,请使用

如果您使用的是.net framework 3.0及以上版本,请在顶部包含using System.Linq,并尝试上述扩展方法。

您需要添加:using System.Linq

或者您可以尝试:

  IList<keyword> sortedList2 = (from r in list
                                orderby r.key
                                select r).ToList();

是的,借助扩展方法,您可以轻松实现这一点

var sortelist = list.OrderBy(x=>x.PropertyName).ToList();
MSDN:

要按升序排序数据,请执行以下操作:

-根据键按升序对序列的元素进行排序

要按降序排列数据,请执行以下操作:


根据键对序列元素进行降序排序。

< P>如果你对关键字类进行控制,并考虑其排序的自然顺序,则关键字实现ICM接口。 如果您无法控制该类,或者不希望将此顺序指定为自然/默认,请创建一个实现IComparator接口的类

编辑:或使用LINQ获得更简单、更快的答案。被困在Java中太久了

var sorted = keywords.OrderBy(k => k.Key);
您应该添加System.Linq.Dynamic。您可以在Nuget package manager中找到它。 我认为这种扩展方法对您有帮助。

尝试以下方法:

var sorted = from c in list orderby c.Key select c;

IList没有排序方法。IntelisSense在IList中不显示任何orderby方法。@user1314871您使用的是.NET pre-3.5还是C pre-3.0?如果是,请参阅我的答案。IntelisSense没有显示任何带有IListy的orderby方法。您应该使用System.Linq for IntelisSense添加。谢谢。。我错过了比赛。现在它可以正常工作了。@user1314871,您很高兴。它的使用非常简单。示例yourlist.SortByModelPropertyx=>x.PropertyName,SortDirection.Ascending
  IList<keyword> sortedList2 = (from r in list
                                orderby r.key
                                select r).ToList();
var sortelist = list.OrderBy(x=>x.PropertyName).ToList();
var sorted = keywords.OrderBy(k => k.Key);
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.WebControls;
using dynamic = System.Linq.Dynamic;
using System.Linq.Expressions;

namespace Lib.Extensions
{
    public static class Utils
    {
        /// <summary>
        /// Sorts by Model property with dynamic expression
        /// </summary>
        /// <param name="list"> </param>
        /// <param name="propertyName"></param>
        /// <param name="sortDirection"> </param>
public static List<TObject> SortByModelProperty<TObject, TProperty>(this List<TObject> list, Expression<Func<TObject, TProperty>> property, SortDirection sortDirection)
    {
        string propertyName = GetPropertyName(property);
        string exp1 = string.Format("model.{0}", propertyName);

        var p1 = Expression.Parameter(typeof(TObject), "model");
        var e1 = System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] { p1 }, null, exp1);

        if (e1 != null)
        {
            if (sortDirection == SortDirection.Ascending)
            {
                var result = list.OrderBy((Func<TObject, TProperty>)e1.Compile()).ToList();
                return result;
            }
            else
            {
                var result = list.OrderByDescending((Func<TObject, TProperty>)e1.Compile()).ToList();
                return result;
            }
        }
        return list;
    }

    private static string GetPropertyName<TObject, TProperty>(Expression<Func<TObject, TProperty>> property)
    {
        MemberExpression memberExpression = (MemberExpression)property.Body;
        PropertyInfo propertyInfo = (PropertyInfo)memberExpression.Member;

        return propertyInfo.Name;
    }

    }
}
var sorted = from c in list orderby c.Key select c;