2

可能重复:
在 C# 中对 IList 进行排序

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

4

8 回答 8

2

您需要添加: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();
于 2012-07-03T05:15:34.563 回答
0

更新: 您可以使用OrderByOrderByDescending

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

或者

var reverseSort = list.OrderByDescending(x=> x.key);
于 2012-07-03T05:14:57.873 回答
0

这是OrderByDescending的链接,如果您有IList<YourType>或,您可以使用它IEnumerable<YourType>

 var sorted = list.OrderByDescending(x=> x.key);
于 2012-07-03T05:15:03.477 回答
0

您可以为此使用Linq Enumerable.OrderBy 方法

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

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

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

于 2012-07-03T05:15:08.830 回答
0

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

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

MSDN:

对数据进行升序排序:

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

对数据进行降序排序:

Enumerable.OrderByDescending 方法 (IEnumerable, Func) - 根据键以降序对序列的元素进行排序。

于 2012-07-03T05:16:36.817 回答
0
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 包管理器。我认为这个扩展方法可以帮助你。

于 2012-07-03T05:18:37.500 回答
0

试试这个:

var sorted = from c in list orderby c.Key select c;
于 2012-07-03T05:21:47.240 回答
-1

如果您可以控制Keyword该类并考虑对其“自然”排序的数字排序,Keyword请实现该IComparable<Keyword>接口。

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

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

var sorted = keywords.OrderBy(k => k.Key);
于 2012-07-03T05:17:43.363 回答