0

私は次のようになります:

System.Collections.Generic.Dictionary<System.DateTime?,double?>タイプを暗黙的に変換することはできませんSystem.Collections.Generic.Dictionary<System.DateTime,double>

EntityFramework内でストアドプロシージャを使用しようとすると

これが私が持っているコードです:

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

    }

SysReadingというストアドプロシージャの呼び出しを使用しています。それを辞書に変換すると、戻り型はnull許容型になりますが、これは望ましくありません。

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

null許容型ではない型を明示的に返す必要があります。

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

これらの値のいずれかがnullの場合、これは例外をスローします。

于 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なく)、これらの列をnull不可にするためにDBを変更することをお勧めします(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 に答える