2013-08-06 35 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

看到更新试试吧 –