2012-11-05 41 views
0

我得到如下:的Linq不能implicitity轉換日期時間,雙

無法隱式轉換類型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的存儲過程調用。當我將它轉換爲字典時,返回類型是可空的,我不想要。

+0

考慮制定茨艾倫e屬性不可爲空。 – SLaks

回答

2

聽起來好像a.DateCollectedDateTime?屬性而不是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>

+0

+1表示(a => a.DateCollected.HasValue) –

1

你需要明確返回非空類型:

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

這將拋出一個異常,如果其中任何值爲null。

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);