2013-08-06 195 views
2

我正在使用實體框架。 我有以下:c#,實體框架存儲過程

​​

GetParamAlerts是存儲過程和它的類型的

System.Data.Objects.ObjectResult<GetParamAlerts_Result> 

注意GetParamAlerts返回多行。

當我運行上面我的代碼以下錯誤信息:

無法隱式轉換類型:

'System.Data.Objects.ObjectResult' 到 'PVT_Alert_Notification.GetParamAlerts_Result'

不知道如何解決這個問題。

+0

LINQ到SQL是不一樣的LINQ到實體。這是實體框架還是LINQ to SQL? – StriplingWarrior

+0

這是實體框架 –

+0

@NatePet,你是​​否從這個方法返回一個IList ? – christiandev

回答

3

這是因爲實體框架不能保證你的存儲過程將總是返回單所以它被放入一個ObjectResult其中is just an enumerable collection。如果你總是期待一個結果,你可以使用db.GetParamAlerts().Single()得到的結果GetParamAlerts_Result,或使用任何標準的枚舉方法,如First()FirstOrDefault()SingleOrDefault()

+0

謝謝Steven,不是它會返回多行。你可以調整上面的代碼來反映這一點。我做了一個ToList(),但得到了類似的錯誤消息。 –

+0

@NatePet我不太明白你的問題。做一個'ToList()'真的不會做任何事情來將一個集合轉換爲單一類型,導致類似的轉換錯誤。 –

+0

@NatePet'System.Data.Objects.ObjectResult '幾乎已經是一個列表。不需要'ToList()'或其他任何東西。只需使用'GetParamAlerts_Result paramRslt = db。GetParamAlerts()。Single();'它會工作。 –

0

它看起來像你應該要麼使用

PVT_Alert_Notification.GetParamAlerts_Result paramRslt = db.GetParamAlerts(); 

或方法返回錯誤的類型?你可以把這個方法的代碼放進去嗎?或者您正在收到集合

如果你有一個集合,你可以使用:

var result = db.GetParamAlerts(); 
return result.FirstOrDefault(); 

你會看到類似的帖子here

0

嘗試合併第一或默認在結尾

GetParamAlerts_Result paramRslt = db.GetParamAlerts().FirstOrDefault(); 

嘗試使用投

GetParamAlerts_Result paramRslt = db.GetParamAlerts().Cast<GetParamAlerts_Result>().ToList(); 
+0

謝謝,但我得到一個列表。你可以調整代碼來反映這一點。我做了一個.ToList(),但沒有奏效。 –

+0

看到更新試試吧 –