Nullable DateTime参数会导致异常

时间:2014-07-31 11:01:17

标签: c# asp.net-mvc linq

我正在尝试创建一个API方法,它允许按日期过滤条目。我想让我们使用两个参数 - startDate和endDate。其中第二个是可选的。

public IEnumerable<Recommendation> GetRecommendationByDate(DateTime startDate, DateTime? endDate) 
{
    if (endDate == null) 
    {
        endDate = DateTime.Now;
    }

    var output = db.Recommendations.Where(r => r.IsPublished == true &&
                                               r.CreatedDate.CompareTo(startDate) > 0 &&
                                               r.CreatedDate.CompareTo(endDate) < 0)
                                   .ToList();

        return output;
    }

在我添加了可空符号后,当第二个参数(endDate)不为null时,方法会产生异常。当它为null时,没有任何问题。

异常声音:

  

无法创建“System.Object”类型的常量值。在此上下文中仅支持原始类型或枚举类型。

原因是什么以及如何解决?

1 个答案:

答案 0 :(得分:1)

添加.HasVale并检查endDate是否包含值,如果是,则使用endDate.Value,如下所示

public IEnumerable<Recommendation> GetRecommendationByDate(DateTime startDate, DateTime? endDate) 
    {
        if (endDate == null) 
        {
            endDate = DateTime.Now;
        }

        var output = db.Recommendations.Where(r => r.IsPublished == true &&
                                                   r.CreatedDate.CompareTo(startDate) > 0 &&
                                                   r.CreatedDate.CompareTo(endDate.HasValue ? endDate.Value : (The default you want to put when endDate is null)) < 0)
                                       .ToList();

            return output;
        }