【问题标题】:C# Generic Type Get Minimum DateC# 泛型类型获取最小日期
【发布时间】:2016-06-22 09:55:19
【问题描述】:

我有一个泛型类型的对象列表 (List myGenericList),并且我知道泛型类型中有一个属性“日期”(日期时间类型)。

我想获得最短日期,如下所示: myGenericList.Min(r=>r.Date);

这是我实现的,但下面的代码给出了错误:

 - 'List<T>' does not contain a definition for 'Min' and the best
   extension method overload 'Queryable.Min<T, DateTime>(IQueryable<T>,
   Expression<Func<T, DateTime>>)' requires a receiver of type
   'IQueryable<T>' myGenericList

代码:

    internal DateTime GetMinimumDate()
    {
        Expression<Func<T, DateTime>> lambdaExpression = ConstructLambdaExpression();
        return myGenericList.Min(lambdaExpression);
    }

    private Expression<Func<T, DateTime>> ConstructLambdaExpression()
    {
        //construct lambda expression: r => r.Date
        var parameterExpression = Expression.Parameter(typeof(T));
        var propertyOrFieldExpression = Expression.PropertyOrField(parameterExpression, "Date");
        return Expression.Lambda<Func<T, DateTime>>(propertyOrFieldExpression,parameterExpression);

    }

你有什么想法吗? 谢谢!

问候, 蕾欧娜

【问题讨论】:

    标签: c# generics lambda


    【解决方案1】:

    Expression&lt;Func&lt;T, DateTime&gt;&gt; 更改为Func&lt;T, DateTime&gt;

    List(实际上是IEnumerable)的Min 函数接受Func 而不是Expression。这是您遇到的错误。

    工作代码:

    internal DateTime GetMinimumDate<T>(List<T> myGenericList)
    {
        Func<T, DateTime> lambdaExpression = ConstructLambdaExpression<T>();
        return myGenericList.Min(lambdaExpression);
    }
    
    static Func<T, DateTime> ConstructLambdaExpression<T>()
    {
        PropertyInfo dateProperty = typeof(T).GetProperties().FirstOrDefault(x => x.Name == "Date");
        return t => Convert.ToDateTime(dateProperty.GetValue(t));
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 2011-07-22
      相关资源
      最近更新 更多