2

重複の可能性:
C#でのIListの並べ替え

whereキーワードはIList<Keyword>、タイトル(文字列)とキー(数値)を含むクラスです。この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
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

更新:OrderByまたは を使用できますOrderByDescending

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 Methodを使用できます 。

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

降順で並べ替えるには、Enumerable.OrderByDescending メソッドを使用します。

.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 メソッド (IEnumerable、Func) - キーに従って昇順でシーケンスの要素を並べ替えます。

データを降順で並べ替えるには:

Enumerable.OrderByDescending メソッド (IEnumerable、Func) - キーに従ってシーケンスの要素を降順で並べ替えます。

于 2012-07-03T05:16:36.817 に答える
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 に答える