c# - 如何按 double 值对 List<T> 进行排序?

标签 c# linq double linq-to-objects

这听起来很简单,但没那么简单。

我想根据 T 的一个属性来排序一个 List,它是 double 类型。

最佳答案

如果你在编译前知道属性名:

myList = myList.OrderBy(a=>a.propertyName).ToList();

myList = (from m in myList order by m.propertyName).ToList();

如果您在编译时没有该属性(例如在网格中进行动态排序等);尝试以下扩展方法:

static class OrderByExtender
{
    public static IOrderedEnumerable<T> OrderBy<T>(this IEnumerable<T> collection, string key, string direction)
    {
        LambdaExpression sortLambda = BuildLambda<T>(key);

        if(direction.ToUpper() == "ASC")
            return collection.OrderBy((Func<T, object>)sortLambda.Compile());
        else
            return collection.OrderByDescending((Func<T, object>)sortLambda.Compile());
    }

    public static IOrderedEnumerable<T> ThenBy<T>(this IOrderedEnumerable<T> collection, string key, string direction)
    {
        LambdaExpression sortLambda = BuildLambda<T>(key);

        if (direction.ToUpper() == "ASC")
            return collection.ThenBy((Func<T, object>)sortLambda.Compile());
        else
            return collection.ThenByDescending((Func<T, object>)sortLambda.Compile());
    }

    private static LambdaExpression BuildLambda<T>(string key)
    {
        ParameterExpression TParameterExpression = Expression.Parameter(typeof(T), "p");
        LambdaExpression sortLambda = Expression.Lambda(Expression.Convert(Expression.Property(TParameterExpression, key), typeof(object)), TParameterExpression);
        return sortLambda;
    }
}

然后点赞

myList = myList.OrderBy("propertyName", "ASC").ToList();

关于c# - 如何按 double 值对 List<T> 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2136145/

相关文章:

c# - 如何使用c#中的其他参数将值从一个表插入到mysql中的另一个表

c# - Linq XML 查询属性中具有特定值的父级的后代

java - 对 double 数据类型的大量操作结果为零

java - Java 中比 double 更大的数据类型是什么?

c - -1.0 和 1.0 之间的 double 有多少位精度?

c# - 使用 C# 将字符串插入 SQL

c# - 在 WCF 服务的方法中使用输出参数是不好的做法吗?

c# - 使用 ODP.NET (C#) 将对象传递给 oracle 包中的过程时必须使用哪种数据库类型?

Linq 到 Sql 多对多

c# - Linq Lambda 从聚合中获取两个属性作为字符串