在Entity Framework 4中,当我将函数import用于存储过程然后用作标量值时,我遇到了问题。它生成以下代码:
public virtual ObjectResult<Nullable<int>> GetTopEmployee()
{
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<int>("GetTopEmployee");
}
如何使用此方法的返回值?
例如,此代码可以正常工作:
NorthwindEntities db = new NorthwindEntities();
var i = db.GetTopEmployee();
但是我想仅将返回值用作int。如果我在函数import中使用返回值为非,则将-1作为输出。
当我尝试以下代码时:
NorthwindEntities db2 = new NorthwindEntities();
int j = db.GetTopEmployee();
它抛出错误说:
无法将类型'System.Data.Objects.ObjectResult'隐式转换为'int'
如何解析上述内容?
答案 0 :(得分:80)
请注意,GetTopEmployee
的返回类型是ObjectResult<Nullable<int>>
。 ObjectResult<T>
实施IEnumerable<T>
,因此您的方法可以返回多个Nullable<int>
。
我假设您正在尝试为员工获取某种形式的身份证明。如果您完全确定只获得一个结果,则可以使用以下代码来获取该ID。
var topId = db.GetTopEmployee().FirstOrDefault();
topId
可能为null。您必须使用topId.Value
或var result = topId ?? -1;
来获得int结果。
NorthwindEntities db = new NorthwindEntities();
int j = db.GetTopEmployee().FirstOrDefault() ?? -1;