【发布时间】:2012-07-03 12:37:31
【问题描述】:
我有一个IList<Keyword>,其中关键字是一个包含标题(字符串)和键(数字)的类。我希望根据键对这个 IList 进行排序。是否有我可以使用的内置 C# 功能?
【问题讨论】:
我有一个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();
【讨论】:
更新:
你可以使用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);
【讨论】:
试试这个:
var sorted = from c in list orderby c.Key select c;
【讨论】:
您可以为此使用Linq Enumerable.OrderBy Method:
var result = listOfObject.OrderBy(item => item.key).ToList();
要按降序排序,请使用Enumerable.OrderByDescending Method..
如果您使用的是 .net framework 3.0 及更高版本,请在顶部包含 using System.Linq 并尝试上述扩展方法。
【讨论】:
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 包管理器。 我认为这个扩展方法对你有帮助。
【讨论】:
是的,借助扩展方法,您可以轻松实现这一目标
var sortelist = list.OrderBy(x=>x.PropertyName).ToList();
MSDN:
对数据进行升序排序:
Enumerable.OrderBy Method (IEnumerable, Func) - 根据某个键对序列中的元素进行升序排序。
对数据进行降序排序:
Enumerable.OrderByDescending Method (IEnumerable, Func) - 根据某个键对序列中的元素进行降序排序。
【讨论】:
如果您可以控制Keyword 类并考虑数字的“自然”顺序,请让Keyword 实现IComparable<Keyword> 接口。
如果您无法控制该类,或者您不想将此顺序指定为自然/默认,请创建一个实现 IComparator<Keyword> 接口的类。
编辑:或者使用 LINQ 获得更简单、更快捷的答案。卡在 Java 太久了!
var sorted = keywords.OrderBy(k => k.Key);
【讨论】: