重複の可能性:
C#でのIListの並べ替え
whereキーワードはIList<Keyword>
、タイトル(文字列)とキー(数値)を含むクラスです。このIListをキーに基づいて並べ替えたいと思います。使用できる組み込みのC#機能はありますか?
重複の可能性:
C#でのIListの並べ替え
whereキーワードはIList<Keyword>
、タイトル(文字列)とキー(数値)を含むクラスです。このIListをキーに基づいて並べ替えたいと思います。使用できる組み込みのC#機能はありますか?
以下を追加する必要があります。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();
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パッケージマネージャーを見つけることができます。この拡張方法が役立つと思います。
更新:OrderBy
または
を使用できますOrderByDescending
var sort = list.OrderBy(x=> x.key);
または
var reverseSort = list.OrderByDescending(x=> x.key);
またはがある場合に使用できるOrderByDescendingへのリンクを次に示します。IList<YourType>
IEnumerable<YourType>
var sorted = list.OrderByDescending(x=> x.key);
これにはLinq Enumerable.OrderBy Methodを使用できます 。
var result = listOfObject.OrderBy(item => item.key).ToList();
降順で並べ替えるには、Enumerable.OrderByDescending メソッドを使用します。
.net Framework 3.0 以降を使用している場合は、上に含めusing System.Linq
て、上記の拡張メソッドを試してください。
はい、拡張メソッドの助けを借りて、これを簡単に達成できます
var sortelist = list.OrderBy(x=>x.PropertyName).ToList();
MSDN :
データを昇順でソートするには:
Enumerable.OrderBy メソッド (IEnumerable、Func) - キーに従って昇順でシーケンスの要素を並べ替えます。
データを降順で並べ替えるには:
Enumerable.OrderByDescending メソッド (IEnumerable、Func) - キーに従ってシーケンスの要素を降順で並べ替えます。
これを試して:
var sorted = from c in list orderby c.Key select c;
クラスを制御できKeyword
、番号の順序を「自然」な順序にすることを検討している場合は、インターフェースをKeyword
実装してください。IComparable<Keyword>
クラスを制御できない場合、またはこの順序を自然/デフォルトとして指定したくない場合は、IComparator<Keyword>
インターフェイスを実装するクラスを作成します。
編集:または、LINQを使用して、より簡単で迅速な回答を取得します。Javaで立ち往生しすぎています!
var sorted = keywords.OrderBy(k => k.Key);