【问题标题】:Sorting IList<Specific_Object_Type> [duplicate]排序 IList<Specific_Object_Type> [重复]
【发布时间】:2012-07-03 12:37:31
【问题描述】:

可能重复:
Sorting an IList in C#

我有一个IList&lt;Keyword&gt;,其中关键字是一个包含标题(字符串)和键(数字)的类。我希望根据键对这个 IList 进行排序。是否有我可以使用的内置 C# 功能?

【问题讨论】:

标签: c# .net ilist


【解决方案1】:

您需要添加:using System.Linq;

IList<keyword> sortedList = list.OrderBy(r => r.key).ToList();

或者你可以试试:

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

【讨论】:

  • 谢谢.. 我错过了使用。现在它工作正常。
  • @user1314871,不客气
【解决方案2】:

更新: 你可以使用OrderByOrderByDescending

var sort = list.OrderBy(x=> x.key);

或者

var reverseSort = list.OrderByDescending(x=> x.key);

【讨论】:

  • IList 没有排序方法。
【解决方案3】:

这是一个指向OrderByDescending 的链接,如果您有IList&lt;YourType&gt;IEnumerable&lt;YourType&gt;,则可以使用它。

 var sorted = list.OrderByDescending(x=> x.key);

【讨论】:

  • intelisense 不显示任何带有 IList 的 orderby 方法。
  • @user1314871 您使用的是 .NET pre-3.5 还是 C# pre-3.0?如果是这样,请参阅我的答案。
【解决方案4】:

试试这个:

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

【讨论】:

    【解决方案5】:

    您可以为此使用Linq Enumerable.OrderBy Method

    var result = listOfObject.OrderBy(item => item.key).ToList();
    

    要按降序排序,请使用Enumerable.OrderByDescending Method..

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

    【讨论】:

    • intelisense 不显示任何带有 IList 的 orderby 方法
    • 你应该使用 System.Linq 添加智能感知
    【解决方案6】:
    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;
        }
    
        }
    }
    

    你应该添加 System.Linq.Dynamic。你可以找到它 Nuget 包管理器。 我认为这个扩展方法对你有帮助。

    【讨论】:

    • 它的使用非常简单。示例 yourlist.SortByModelProperty(x=>x.PropertyName,SortDirection.Ascending)
    【解决方案7】:

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

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

    MSDN:

    对数据进行升序排序:

    Enumerable.OrderBy Method (IEnumerable, Func) - 根据某个键对序列中的元素进行升序排序。

    对数据进行降序排序:

    Enumerable.OrderByDescending Method (IEnumerable, Func) - 根据某个键对序列中的元素进行降序排序。

    【讨论】:

      【解决方案8】:

      如果您可以控制Keyword 类并考虑数字的“自然”顺序,请让Keyword 实现IComparable&lt;Keyword&gt; 接口。

      如果您无法控制该类,或者您不想将此顺序指定为自然/默认,请创建一个实现 IComparator&lt;Keyword&gt; 接口的类。

      编辑:或者使用 LINQ 获得更简单、更快捷的答案。卡在 Java 太久了!

      var sorted = keywords.OrderBy(k => k.Key);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-02
        • 2016-03-02
        • 2020-05-17
        • 2013-10-10
        • 1970-01-01
        • 2012-01-08
        • 1970-01-01
        • 2023-04-07
        相关资源
        最近更新 更多