LINQ ToList()方法抛出FormatException:String未被识别为有效的DateTime

时间:2017-03-21 14:51:20

标签: c# linq datetime formatexception

异常的堆栈跟踪是:

System.FormatException: String was not recognized as a valid DateTime. 
at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, 
DateTimeStyles styles)
at lambda_method(Closure , **MyType** )
at System.Linq.Enumerable.WhereListIterator`1.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)

MyType映射到DB中的表,该表具有date类型的列。

enter image description here

现在,在我的代码中,我有以下方法:

private static List<T> MyMethod<T>(IEnumerable<T> results)
    {
        if (results == null)
        {
            return null;
        }

        var filteredResults = results.AsQueryable();
        return filteredResults.ToList();
    }

异常发生在行:return filteredResults.ToList();

保存在DB中的格式为:2016-12-14 (YYYY-MM-DD)。 我理解(从阅读有关此问题的其他主题),问题可能与服务器的文化或时间/日期设置有关。然而,我还没有成功地复制这个例外。您对如何重现或预防此问题有任何建议吗?

1 个答案:

答案 0 :(得分:0)

在这些情况下,有时可以帮助在类型中添加额外的字符串属性,以避免数据绑定问题。然后,您可以将数据库值写入该字符串字段,然后以受控方式将其转换为另一个字段中的DateTime。

public class PocoObject
{
    public string DateString { get; set; }

    public DateTime Date
    {
        get
        {
            DateTime date;
            return DateTime.TryParseExact(DateString, 
                "yyyy-MM-dd", 
                CultureInfo.InvariantCulture, 
                DateTimeStyles.None, 
                out date) 
            ? date : DateTime.MinValue;
        }
    }
}