0

我得到以下信息:

无法将类型隐式转换System.Collections.Generic.Dictionary<System.DateTime?,double?>System.Collections.Generic.Dictionary<System.DateTime,double>

当我尝试在实体框架中使用存储过程时

这是我拥有的代码:

    private Dictionary<DateTime, double> GetData(string columnName)
    {
        return db.SysReading(columnName, Convert.ToString(LocId)).
            ToDictionary( a => a.DateCollected, a => a.ElementReading);

    }

我正在调用一个名为 SysReading 的存储过程。当我将它转换为字典时,返回类型是可空的,这是我不想要的。

4

3 回答 3

2

好吧,听起来像是a.DateCollected一个DateTime?属性,而不是DateTime. 如果您认为所有键都有值,则可以使用:

private Dictionary<DateTime, double> GetData(string columnName)
{
    return db.SysReading(columnName, Convert.ToString(LocId))
             .ToDictionary(a => a.DateCollected.Value, a => a.ElementReading);
}

或者您可以过滤然后转换:

private Dictionary<DateTime, double> GetData(string columnName)
{
    return db.SysReading(columnName, Convert.ToString(LocId))
             .Where(a => a.DateCollected.HasValue)
             .ToDictionary(a => a.DateCollected.Value, a => a.ElementReading);
}

或者,更改您的方法以返回Dictionary<DateTime?, double>.

于 2012-11-05T18:48:40.263 回答
1

您需要显式返回不可为空的类型:

    return db.SysReading(columnName, Convert.ToString(LocId)).
        ToDictionary( a => a.DateCollected.Value, a => a.ElementReading.Value);

如果这些值中的任何一个为空,这将引发异常。

于 2012-11-05T18:48:16.907 回答
0

您正在访问Nullable值。(所以DateTime?而不是DateTime.

return db.SysReading(columnName, Convert.ToString(LocId)).
    ToDictionary( a => a.DateCollected.Value, a => a.ElementReading.Value);

但是,如果这些值不应该是NULL,最好的做法(而不是假设这些值总是有一个值,然后调用.Value)应该是修改您的数据库以使这些列不可为空(NOT NULL)。

因此,调用您的方法将返回一个Dictionary<System.DateTime,double>对象。

return db.SysReading(columnName, Convert.ToString(LocId)).
    ToDictionary( a => a.DateCollected, a => a.ElementReading);
于 2012-11-05T18:54:40.650 回答